探岳+Haier某型号空调也是一个产品族,三、抽象工厂方式的组成

一、什么是虚幻工厂方式

一、什么是画饼充饥工厂方式

  抽象工厂形式的来意为:给客户端提供一个接口,可以创造五个产品族中的产品对象
,而且选择抽象工厂形式还要满足以下规则:

  抽象工厂格局的来意为:给客户端提供一个接口,可以创设多少个产品族中的产品对象
,而且采纳抽象工厂形式还要满足以下原则:

  1. 系统中有多个产品族,而系统一遍只可能消费其中一族产品。 
  2. 同属于同一个产品族的成品方可利用。 
  1. 系统中有多少个产品族,而系统三回只可能消费其中一族产品。 
  2. 同属于同一个产品族的产品方可使用。 

  产品族:位于不一致产品等级结构中,功效相关联的产品组合的家门。上边例子的
小车和空调就是五个产品树, 路特斯C200+格力某型号空调就是一个产品族,
同理, 君威+Haier某型号空调也是一个产品族。

  产品族:位于不一致产品等级结构中,功用相关联的出品组合的家门。下边例子的
汽车和空调就是八个产品树, 劳斯莱斯C200+格力某型号空调就是一个产品族,
同理, 骊威+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(); //热的时候可以吹吹空调

?>

 

 

 

 

工厂方法方式:

厂子方法形式:

  • 一个空洞产品类,可以派生出七个有血有肉产品类。
  • 一个架空工厂类,可以派生出五个具体工厂类。
  • 各种具体工厂类只好创制一个现实产品类的实例。
  • 一个架空产品类,可以派生出多少个有血有肉产品类。
  • 一个抽象工厂类,可以派生出四个具体工厂类。
  • 各种具体工厂类只可以创立一个切实可行产品类的实例。

架空工厂方式:

空泛工厂方式:

  • 八个抽象产品类,每个抽象产品类可以派生出八个有血有肉产品类。
  • 一个浮泛工厂类,可以派生出多少个具体工厂类。
  • 各类具体工厂类可以成立四个有血有肉产品类的实例。
  • 三个抽象产品类,每个抽象产品类可以派生出多个有血有肉产品类。
  • 一个抽象工厂类,可以派生出多少个具体工厂类。
  • 每个具体工厂类可以创建三个有血有肉产品类的实例。

 

 

简不难单工厂 : 用来生产一样等级结构中的任意产品。(对于增添新的制品,无能为力)

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

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

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

抽象工厂
:用来生产差异产品族的全方位成品。(对于增添新的成品,无能为力;协理增加产品族)

抽象工厂
:用来生产不一样产品族的所有出品。(对于伸张新的制品,无能为力;支持扩充产品族)

 

 

倘若有如何疑难如故讲错的地点,欢迎大家留言。

假使有何样疑点照旧讲错的地点,欢迎大家留言。