1.抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
抽象多个工厂;
<?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(); ?>
原文:https://www.cnblogs.com/wanglijun/p/10924650.html