PHP面向對象設計模式-9.2-工廠模式代碼演化實例

版本1.0

<?php

/**
 * Created by Victor
 * User: Victor
 * Date: 2018/3/16
 * Time: 9:54
 */

/**
 * 產品抽象類
 * Class AppEncoder
 * Created by Victor
 */
abstract class AppEncoder
{
    abstract function encode();
}

class BloggsAppEncoder extends AppEncoder
{
    public function encode()
    {
        return 'Appointment data encode in BloggsCal format';
    }
}

class MegaAppEncoder extends AppEncoder
{
    public function encode()
    {
        return 'Appointment data encode in MegaCal format';
    }
}

/**
 *產品生產類---工廠抽象類
 */
 abstract class CommsManger
 {
     public function getAppEncoder()
     {
         return new BloggsAppEncoder();
     }
 }

版本2.0

<?php

/**
 * Created by Victor
 * User: Victor
 * Date: 2018/3/16
 * Time: 9:54
 */

/**
 * 產品抽象類
 * Class AppEncoder
 * Created by Victor
 */
abstract class AppEncoder
{
    abstract function encode();
}

class BloggsAppEncoder extends AppEncoder
{
    public function encode()
    {
        return 'Appointment data encode in BloggsCal format';
    }
}

class MegaAppEncoder extends AppEncoder
{
    public function encode()
    {
        return 'Appointment data encode in MegaCal format';
    }
}

/**
 *產品生產類---工廠抽象類
 */
class CommsManger
 {
     const BLOGGS =1;
     const MEGA   =2;
     private $_mode;

     public function __construct($mode)
     {
         $this->_mode = $mode;
     }

     public function getAppEncoder()
     {
         switch ($this->_mode)
         {
             case self::BLOGGS:
                 return new BloggsAppEncoder();
                 break;
             case self::MEGA:
                 return new MegaAppEncoder();
                 break;
         }
     }
 }

 //調用的
$comms = new CommsManger(CommsManger::BLOGGS);
$appEncoder = $comms->getAppEncoder();
print_r($appEncoder->encode());

版本三:

<?php

/**
 * Created by Victor
 * User: Victor
 * Date: 2018/3/16
 * Time: 9:54
 */

/**
 * 產品抽象類
 * Class AppEncoder
 * Created by Victor
 */
abstract class AppEncoder
{
    abstract function encode();
}

class BloggsAppEncoder extends AppEncoder
{
    public function encode()
    {
        return 'Appointment data encode in BloggsCal format';
    }
}

class MegaAppEncoder extends AppEncoder
{
    public function encode()
    {
        return 'Appointment data encode in MegaCal format';
    }
}



abstract class CommsAppEncoder
{
    abstract function getEncoder() : AppEncoder;//方法返回類型約束
    abstract function getTexter();//新的功能
}

class BlogComms extends CommsAppEncoder
{
    public function getEncoder() : AppEncoder
    {
        // TODO: Implement getEncoder() method.
        return  new BloggsAppEncoder();
    }

    public function getTexter()
    {
        // TODO: Implement getTexter() method.
        return 'Bloggs Texter';
    }
}

class Mega extends CommsAppEncoder
{
    public function getEncoder() : AppEncoder
    {
        // TODO: Implement getEncoder() method.
        return  new MegaAppEncoder();
    }

    public function getTexter()
    {
        // TODO: Implement getTexter() method.
        return 'Mega Texter';
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章