PHP设计模式
创建型模式(3)抽象工厂模式
抽象工厂模式为一组相关或相互依赖的对象创建提供接口,而无需指定其具体实现类。抽象工厂的客户端不关心如何创建这些对象,只关心如何将它们组合到一起。 举个例子,如果某个应用是可移植的,那么它需要封装平台依赖,这些平台可能包括窗口系统、操作系统、数据库等等。这种封装如果未经设计,通常代码会包含多个 if 条件语句以及对应平台的操作。这种硬编码不仅可读性差,而且扩展性也不好。 提供一个间接的层(即“抽象工厂”)抽象一组相关或依赖对象的创建而不是直接指定具体实现类。该“工厂”对象的职责是为不同平台提供创建服务。客户端不需要直接创建平台对象,而是让工厂去做这件事。 这种机制让替换平台变得简单,因为抽象工厂的具体实现类只有在实例化的时候才出现,如果要替换的话只需要在实例化的时候指定具体实现类即可。 ```php <?php /* interface是完全抽象的,只能声明方法,而且只能声明 public 的方法,不能声明 private 及 protected 的方法 不能定义方法体,也不能声明实例变量 。 interface 却可以声明常量变量 。 */ interface Car { const BIG=100; // public function getWidth(); //获取车宽度 不允许用private和protected修饰 public function getHeight();//获取车高度 } interface Colors { public function setColor($c); public function getColor(); } /** 抽象工厂类的定义;必须实现车和颜色的interface接口 1.抽象类是和抽象方法 2.抽象类不能被直接实例化即new;抽象类中只定义(或部分实现)子类需要的方法。 子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。 3.子类必须实现抽象类利所有抽象方法 4.抽象方法只能用public 和protected修饰 **/ abstract class AbstractFactory implements Car,Colors { //获取车的属性 abstract public function getWidth(); abstract public function getHeight(); //获取车颜色 abstract public function setColor($c); abstract public function getColor(); public function getName(){ return '宝马'; } } /* 子类必须实现父类的抽象方法和接口的方法 */ class CarFactory extends AbstractFactory { protected $car_color; protected $h; protected $w; public function getWidth() { return 1000; } public function getHeight() { return 200; } public function setColor($c){ } public function getColor(){ return null; } } /* 子类必须实现父类的抽象方法和接口的方法 */ class ColorFactory extends AbstractFactory { protected $car_color; protected $h; protected $w; public function getWidth() { return null; } public function getHeight() { return null; } public function setColor($c){ $this->car_color = $c; } public function getColor(){ return $this->car_color; } } //实现生产车的类 class ProductCar { public static function getFactory($type){ if($type=='car'){ return new CarFactory(); }elseif($type=='color'){ return new ColorFactory(); } } } //开始使用 //获取车属性 $fac_car = ProductCar::getFactory('car'); echo $fac_car->getWidth(); //后去颜色属性 $fac_color = ProductCar::getFactory('color'); $fac_color->setColor('红色'); echo $fac_color->getColor(); ```
顶部
收展
底部
[TOC]
目录
PHP设计模式概述
设计模式之开闭原则
设计模式之里氏代换原则
设计模式之接口隔离原则
创建型模式(1)单例模式
创建型模式(2)工厂模式
创建型模式(3)抽象工厂模式
创建型模式(4)原型模式
创建型模式(5)建造者模式
结构型模式(6)委托代理模式
结构型模式(7)装饰模式
结构型模式(8)外观模式
结构型模式(9)组合模式
结构型模式(10)适配器模式
结构型模式(11)桥接模式
结构型模式(12)享元模式
行为型模式(13)策略模式
行为型模式(14)解释器模式
行为型模式(15)观察者模式
行为型模式(16)模板方法模式
行为型模式(17)迭代器模式
行为型模式(18)命令模式
行为型模式(19)备忘录模式
行为型模式(20)状态模式
行为型模式(21)访问者模式
行为型模式(22)中介者模式
行为型模式(23)责任链模式
相关推荐
PHP基础
PHP函数
PHP算法
PHP版本