三 、抽象工厂情势的构成,三 、抽象工厂情势的组成

一 、什么是空洞工厂情势

一 、什么是架空工厂形式

  抽象工厂方式的意图为:给客户端提供1个接口,能够成立三个产品族中的产品对象
,而且动用抽象工厂形式还要满足以下规则:

  抽象工厂形式的企图为:给客户端提供贰个接口,能够成立多少个产品族中的产品对象
,而且使用抽象工厂方式还要满意以下标准:

  1. 系统中有多个产品族,而系统贰遍只恐怕消费在那之中一族产品。 
  2. 同属于同一个产品族的产品能够使用。 
  1. 系统中有多少个产品族,而系统一回只恐怕消费在那之中一族产品。 
  2. 同属于同2个产品族的制品得以使用。 

  产品族:位于差异产品等级结构中,效用相关联的出品组合的家族。上面例子的
小车和空调就是几个产品树, MaybachC200+格力某型号空气调节就是三个产品族,
同理, Cross+海尔(Haier)某型号空气调节也是多个产品族。

  产品族:位于分化产品等级结构中,作用相关联的制品组合的家门。下边例子的
小车和空气调节就是多少个产品树, BentleyC200+格力某型号空气调节就是1个产品族,
同理, Corolla+海尔(Haier)某型号空气调节也是一个产品族。

二、类图

二、类图

图片 1

图片 2

 

 

 

 

三 、抽象工厂形式的整合

叁 、抽象工厂方式的三结合

  1. 虚幻工厂(AbstractFactory):显明工厂的业务范围。
  2. 切切实实工厂(ConcreteFactory):种种具体育工作厂对应二个产品族。具体育工作厂决定生产哪些具体产品对象。
  3. 空洞产品(AbstractProduct):同第一产业品等级结构的抽象类。
  4. 切实产品(ConcreteProduct):可供生产的具体产品。
  1. 空洞工厂(AbstractFactory):分明工厂的业务范围。
  2. 具体育工作厂(ConcreteFactory):种种具体工厂对应一个产品族。具体育工作厂决定生产哪些具体产品对象。
  3. 空泛产品(AbstractProduct):同一产品等级结构的抽象类。
  4. 实际产品(ConcreteProduct):可供生产的切实可行产品。

 

 

 产品类:

 产品类:

<?php

// 汽车(抽象产品接口)
interface AutoProduct
{
    public function dirve();
}


//奥迪A4(具体产品类)
class AudiA4Product implements AutoProduct
{
    //获取汽车名称
    public function dirve()
    {
        echo "开奥迪A4"."<br>";
    }
}

//奔驰C200(具体产品类)
class BenzC200Product implements AutoProduct
{
    //获取汽车名称
    public function dirve()
    {
        echo "开奔驰C200"."<br>";
    }
}

?>
<?php

// 汽车(抽象产品接口)
interface AutoProduct
{
    public function dirve();
}


//奥迪A4(具体产品类)
class AudiA4Product implements AutoProduct
{
    //获取汽车名称
    public function dirve()
    {
        echo "开奥迪A4"."<br>";
    }
}

//奔驰C200(具体产品类)
class BenzC200Product implements AutoProduct
{
    //获取汽车名称
    public function dirve()
    {
        echo "开奔驰C200"."<br>";
    }
}

?>

 

 

<?php

//空调(抽象产品接口)
interface AirCondition
{
    public function blow();
}

//格力空调某型号(具体产品类)
class GreeAirCondition implements AirCondition
{
    public function blow()
    {
        echo "吹格力空调某型号"."<br>";
    }
}

//海尔空调某型号(具体产品类)
class HaierAirCondition implements AirCondition
{
    public function blow()
    {
        echo "吹海尔空调某型号"."<br>";
    }
}

?>
<?php

//空调(抽象产品接口)
interface AirCondition
{
    public function blow();
}

//格力空调某型号(具体产品类)
class GreeAirCondition implements AirCondition
{
    public function blow()
    {
        echo "吹格力空调某型号"."<br>";
    }
}

//海尔空调某型号(具体产品类)
class HaierAirCondition implements AirCondition
{
    public function blow()
    {
        echo "吹海尔空调某型号"."<br>";
    }
}

?>

 

 

 

 

工厂类:

工厂类:

<?php

//工厂接口
interface Factory
{
    public function getAuto();
    public function getAirCondition();
}


//工厂A = 奥迪A4 + 海尔空调某型号
class AFactory implements Factory
{
    //汽车
    public function getAuto()
    {
        return new AudiA4Product();
    }

    //空调
    public function getAirCondition()
    {
        return new HaierAirCondition();
    }
}

?>

<?php

//工厂B = 奔驰C200 + 格力空调某型号
class BFactory implements Factory
{
    //汽车
    public function getAuto()
    {
        return new BenzC200Product();
    }

    //空调
    public function getAirCondition()
    {
        return new GreeAirCondition();
    }
}

?>
<?php

//工厂接口
interface Factory
{
    public function getAuto();
    public function getAirCondition();
}


//工厂A = 奥迪A4 + 海尔空调某型号
class AFactory implements Factory
{
    //汽车
    public function getAuto()
    {
        return new AudiA4Product();
    }

    //空调
    public function getAirCondition()
    {
        return new HaierAirCondition();
    }
}

?>

<?php

//工厂B = 奔驰C200 + 格力空调某型号
class BFactory implements Factory
{
    //汽车
    public function getAuto()
    {
        return new BenzC200Product();
    }

    //空调
    public function getAirCondition()
    {
        return new GreeAirCondition();
    }
}

?>

 

 

 

 

客户端测试:

客户端测试:

<?php

//客户端测试代码
$factoryA = new AFactory();
$factoryB = new BFactory();

//A工厂制作车
$auto_carA = $factoryA->getAuto();
$auto_airA = $factoryA->getAirCondition();

//B工厂制作车
$auto_carB = $factoryB->getAuto();
$auto_airB = $factoryB->getAirCondition();

//开奥迪车+吹海尔空调
$auto_carA->dirve();
$auto_airA->blow(); //热的时候可以吹吹空调

//开奔驰车+吹格力空调;
$auto_carB->dirve();
$auto_airB->blow(); //热的时候可以吹吹空调

?>
<?php

//客户端测试代码
$factoryA = new AFactory();
$factoryB = new BFactory();

//A工厂制作车
$auto_carA = $factoryA->getAuto();
$auto_airA = $factoryA->getAirCondition();

//B工厂制作车
$auto_carB = $factoryB->getAuto();
$auto_airB = $factoryB->getAirCondition();

//开奥迪车+吹海尔空调
$auto_carA->dirve();
$auto_airA->blow(); //热的时候可以吹吹空调

//开奔驰车+吹格力空调;
$auto_carB->dirve();
$auto_airB->blow(); //热的时候可以吹吹空调

?>

 

 

 

 

工厂方法情势:

工厂方法形式:

  • 贰个浮泛产品类,能够派生出五个有血有肉产品类。
  • 3个抽象工厂类,能够派生出四个具体育工作厂类。
  • 各样具体育工作厂类只好创立三个切实产品类的实例。
  • 1个虚幻产品类,能够派生出多少个有血有肉产品类。
  • 二个空洞工厂类,可以派生出三个具体育工作厂类。
  • 各种具体育工作厂类只可以创设三个切实可行产品类的实例。

架空工厂格局:

空泛工厂形式:

  • 四个抽象产品类,每种抽象产品类能够派生出八个有血有肉产品类。
  • 八个抽象工厂类,能够派生出多少个具体育工作厂类。
  • 各样具体育工作厂类能够创立多个有血有肉产品类的实例。
  • 四个抽象产品类,各类抽象产品类能够派生出多少个实际产品类。
  • 三个虚无工厂类,能够派生出八个具体育工作厂类。
  • 各个具体育工作厂类可以创造四个有血有肉产品类的实例。

 

 

简言之工厂 : 用来生产相同等级结构中的任意产品。(对于扩充新的成品,无能为力)

回顾工厂 : 用来生产一样等级结构中的任意产品。(对于扩大新的成品,无能为力)

厂子方法
:用来生产相同等级结构中的固定产品。(帮衬扩张任意产品)   

厂子方法
:用来生产相同等级结构中的固定产品。(帮衬扩充任意产品)   

抽象工厂
:用来生产分歧产品族的方方面面出品。(对于增添新的产品,无能为力;帮衬扩展产品族)

抽象工厂
:用来生产区别产品族的整个产品。(对于增添新的出品,无能为力;补助扩充产品族)

 

 

若是有哪些疑难依旧讲错的地点,欢迎我们留言。

倘若有怎么着疑点依旧讲错的地点,欢迎我们留言。