抽象工厂模式

抽象工厂模式:用来生成一组相关或相互依赖的对象。

抽象工厂模式与工厂方法模式的区别: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。 他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构; 而抽象工厂模式则是针对的多个产品等级结构。 在编程中,通常一个产品结构,表现为一个接口或者抽象类, 也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类, 而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。在抽象工厂模式中, 有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。 抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。 我们依然拿生产汽车的例子来说明他们之间的区别。

<?php
/**
 *汽车抽象类
 */
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]; 
    }
}
/**
 *公交车抽象类
 */
abstract class bus extends vehicle {
   /**
    *形体大小:两个门,三个门
    *@var string
    *
    */ 
    public $shape;
    /**
     *设置形体
     *@param $value
     */
    public function setShape( $value ){
        $this->shape = $value;
    }
    /**
     *抽象方法
     *@param
     */
    abstract function run();
}
/**
 *小汽车抽象类
 */
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();
    }
}
/**
 *奥迪车
 */
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();

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

6 条评论

  1. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099
    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠开户专线联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服热线?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠开户客服电话?(▲182(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳东方明珠客服微信?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

  2. badhfsmgvt
    badhfsmgvt

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

  3. hfkdtdmfjp
    hfkdtdmfjp

    深深深1977

  4. newcqhbpth
    newcqhbpth

    吸血鬼猎人d

  5. ybxlwnemal
    ybxlwnemal

    外事警察不要被那个男人骗了

  6. afmmnriikk
    afmmnriikk

    叼茂SEO.bfbikes.com

添加新评论