单例模式与抽象工厂模式结合实例

abstract class ApptEncoder{
    abstract function encode();
}

class BloggsApptEncoder extends ApptEncoder{
    function encode(){
        return 'this is bloggs object';
    }
}

class MegaApptEncoder extends ApptEncoder{
    function encode(){
        return 'this is mega object';
    }
}

abstract class CommsManager{
    abstract function getHeaderText();
    abstract function getApptEncoder();
    abstract function getFooterText();
}

class BloggsCommsManager extends CommsManager{
    function getHeaderText(){
        return 'this is bloggs header';
    }

    function getApptEncoder(){
        return new BloggsApptEncoder();
    }

    function getFooterText(){
        return 'this is bloggs footer';
    }
}

class MegeCommsManger extends CommsManager{
    function getHeaderText(){
        return 'this is mega header';
    }

    function getApptEncoder(){
        return new MegaApptEncoder();
    }

    function getFooterText(){
        return 'this is mega footer';
    }
}

class Settings{
    static $COMMSTYPE = 'Bloggs';
}

class AppConfig{
    private static $instance;
    private $commsManager;

    //将构造方法设置为私有,可以防止继承
    private function __construct(){
        //只会运行一次
        $this->init();
    }

    private function init(){
        switch (Settings::$COMMSTYPE){
            case 'Mega':
                $this->commsManager = new MegaCommsManager();
                break;
            default:
                $this->commsManager = new BloggsCommsManager();
        }
    }

    public static function getInstance(){
        if(empty(self::$instance)){
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function getCommsManager(){
        return $this->commsManager;
    }
}

$commsMgr = AppConfig::getInstance()->getCommsManager();
$commsMgr->getApptEncoder()->encode();






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。工厂模式、抽象工厂模式单例模式、建造者模式、原型模式、适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式、策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 ### 设计模式的三大类 **创建型模式(Creational Pattern):**对类的实例化过程进行了抽象,能够将软件模块中**对象的创建**和对象的使用分离。 (5种)工厂模式、抽象工厂模式单例模式、建造者模式、原型模式 情景记忆:两个人在聊天。一个问:这家**工厂**是干什么的?另一个说:**造 圆型 丹**药的。5个。 **结构型模式(Structural Pattern)**:关注于对象的组成以及对象之间的依赖关系,描述如何将类或者对象结合在一起形成更大的结构,就像**搭积木**,可以通过简单积木的组合形成复杂的、功能更为强大的结构。 (7种)适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式 情景记忆:想象自己正在一个,无论是**外观**还是内部**装饰**都很豪华的度假村,**享**受着7天的带薪年假,那里有小**桥**流水,有**组合**了东西方文化的美食,有会说各国语言的服务员(即**适配器**),还可以**代理**预订各国各航班机票。7个。 **行为型模式(Behavioral Pattern)**:关注于对象的行为问题,是对在不同的对象之间划分责任和算法的抽象化;不仅仅关注类和对象的结构,而且重点关注它们之间的**相互作用**。 (11种)策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 情景记忆:一个**访客**来到一家房屋**中介**门口,正在**观察**宣传栏里的房屋信息,偶然间听到店长对一位新人说:“你向客人推荐房屋的**策略**用错了,你应该用**迭代**的方式介绍所有房源。客人走后,登记客人信息的**模板**也用错了。你的师傅没有向你**解释**清楚,他也有**责任**。我**命令**你用笔记记下我刚才说的话,起到**备忘**的目的”。店长走后,那位新人的**状态**很低落。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值