抽象工厂模式

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

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

<?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();

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

只有地板了

  1. afmmnriikk
    afmmnriikk

    叼茂SEO.bfbikes.com

添加新评论