php 抽象工厂模式

来源:互联网 发布:免费香港电视直播软件 编辑:程序博客网 时间:2024/06/08 02:07
/*抽象工厂模式:用来生成一组相关或相互依赖的对象。抽象工厂模式与工厂方法模式的区别:抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。我们依然拿生产汽车的例子来说明他们之间的区别。 *//** *汽车抽象类 *@aothor li.yonghuan *@version 2014.01.13 * */abstract class vehicle{    /**     *属性     *@var array     */    public $props = array();    /**     *设置属性     *@param $key 属性名     *@param $value 属性值     */    public function setProperty( $key, $value ){       $this->props[$key] = $value;     }    /**     *获取属性值     *@param $key     *     */    public function getProperty( $key ){       return $this->props[$key];     }    }/** *公交车抽象类 *@author li.yonghuan *@version 2014.01.13 */abstract class bus extends vehicle {   /**    *形体大小:两个门,三个门    *@var string    *    */     public $shape;        /**     *设置形体     *@param $value     */    public function setShape( $value ){        $this->shape = $value;    }    /**     *抽象方法     *@param     */    abstract function run();}/** *小汽车抽象类 *@author li.yonghuan *@version 2014.01.13 * */abstract class car extends vehicle{    /**     *两厢,三厢     *@var string     */        public $room;    /**     *设置属性值     *@param $key 属性名     *@param $value 属性值     */    public function setRoom( $value ){       $this->room = $value;     }    /**     *获取属性值     *     */    public function getRoom(){        return $this->room;    }    /**     *抽象方法     *     */    abstract function run();}/** *抽象工厂类 * */abstract class factory{    abstract static function create( $className );}/** *小汽车工厂类 *@author li.yonghuan *@version 2014.01.13 */class carFactory extends factory {    /**     *实现工厂方法     *@param $className 类名     */    public static function create( $className ){        $class = $className;        return new $class();    }}/** *奥迪车 *@author li.yonghuan *@version 2014.01.13 */class audi extends car{        public function run(){        parent::setProperty('brand','audi');        $brand = parent::getProperty('brand');        $this->setRoom('threeRoom');       return $this->room.' '.$brand.' car is running';     }}$car = carFactory::create('audi');echo $car->run();

0 0