博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php之工厂模式
阅读量:6671 次
发布时间:2019-06-25

本文共 2980 字,大约阅读时间需要 9 分钟。

工厂模式概念

工厂模式是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所有代码会自动更改。

3中不同的工厂模式

1.简单工厂模式(静态工厂模式):通过静态方法来创建对象

2.工厂模式:定义一个对象接口,让子类来决定具体的对象实例化
3.抽象工厂模式:使用对象组合来,对象的创建被实现在工厂接口所暴露的出来的方法

代码实例

/** * 简单工厂模式:通过静态方法来实现对象创建 * Interface Drink */interface Drink{    public function buy();}class Coffee implements Drink {    public function buy(){        echo "i want to coffee";    }}class Cola implements Drink{    public function buy()    {        echo "i want to cola";    }}class DrinkStore{    public static function orderCoffee(){        return new Coffee();    }    public static function  orderCola(){         return new Cola();    }}$man = DrinkStore::orderCoffee();$man->buy();//结果输出 i want to coffeeecho "
";$woman = DrinkStore::orderCola();$woman->buy();//结果输出 i want to cola
/** * 工厂模式:通过定义一个对象的接口,让子类来实现对象创建 * Interface Drink */interface Drink{    public function buy();}class Coffee implements Drink {    public function buy(){        echo "i want to coffee";    }}class Cola implements Drink{    public function buy()    {        echo "i want to cola";    }}interface CreateDrink{    public function create();}class CoffeeFactory implements CreateDrink{    public function create()    {        return new Coffee();    }}class ColaFactory implements CreateDrink{    public function create()    {        return new Cola();    }}$coffee_factory = new CoffeeFactory();$man = $coffee_factory->create();$man->buy();//结果输出 i want to coffeeecho "
";$cola_factory = new ColaFactory();$woman = $cola_factory->create();$woman->buy();//结果输出 i want to cola
/** * 抽象工厂模式:提供一个创建一系列的相关的或者相互依赖的对象接口 * 注意:这里和工厂方法的区别是:一系列,而工厂方法则是一个 * Interface Drink */interface Drink{    public function buy();}class CoffeeHot implements Drink {    public function buy(){        echo "i want to hot coffee";    }}class CoffeeCold implements Drink {    public function buy(){        echo "i want to cold coffee";    }}class ColaHot implements Drink{    public function buy()    {        echo "i want to hot cola";    }}class ColaCold implements Drink{    public function buy()    {        echo "i want to cold cola";    }}interface SuperFactory{    public function createHot();    public function createCold();}class CoffeeFactory implements SuperFactory {    public function createHot()    {        return new CoffeeHot();    }    public function createCold()    {        return new CoffeeCold();    }}class ColaFactory implements SuperFactory{    public function createCold()    {        return new ColaCold();    }    public function createHot()    {        return new ColaHot();    }}$coffee_factory = new CoffeeFactory();$man = $coffee_factory->createHot();$man->buy();

设计原则

1.多用组合,少用继承

2.针对接口编程,不针对实现编程
3.为交互对象之间的松耦合设计而努力
4.类应该对扩展开发,对修改关闭
5.依赖抽象,不要依赖具体类

要点

1.所有工厂都是用来封装对象的创建

2.简单工厂,虽然不是真正的设计模式,但仍不失为一种简单的方法,可以将客户程序从具体的类中解耦
3.工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
4.抽象工厂使用对象组合,对象的创建被是现在工厂接口所暴露出来的地方中
5.所用工厂模式都在通过减少应用程序具体类之间的依赖所促进松耦合
6.工厂方法允许类将实例化延迟到子类中
7.抽象工厂创建相关的对象家族,而不需要依赖他们的具体类

转载地址:http://jxlxo.baihongyu.com/

你可能感兴趣的文章
c++动态链接库函数转换为C#函数
查看>>
编写用逻辑扇区号读写软盘的中断例程
查看>>
Pentaho Big Data Community Home - Pentaho Big Data - Pentaho Wiki
查看>>
HTML基础(二)
查看>>
使用Notepad++实现批量将ANSI转成为UTF-8编码
查看>>
Codeforces Round #280 (Div. 2) E. Vanya and Field 思维题
查看>>
Jquery获取select选中的option的文本信息
查看>>
Android-支付宝快捷支付
查看>>
您需要来自administrators的权限才能对此文件进行更改
查看>>
各类nosql db的功能与性能对比
查看>>
怎样区分直连串口线和交叉串口线?
查看>>
ThinkPHP3.1快速入门(13)自动完成
查看>>
搭建Android开发环境之——Android4.0.3, 4.1, 4.2, 4.3, 4.x,及升级 ADT(22.0.5)和SDK(22.x)...
查看>>
【Javascript】—— 1 方法function的高级特性
查看>>
ios iphone 将log在终端输出
查看>>
Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
查看>>
优秀团队建设--美国式团队(ppt)
查看>>
tail 命令(转)
查看>>
DevExpress学习03——label控件的背景色问题
查看>>
linux文件分割(将大的日志文件分割成小的)
查看>>