北风设计模式课程---2、工厂方法模式

北风设计模式课程---2、工厂方法模式

一、总结

一句话总结:

工厂方法模式相对于简单工厂模式只是修改了 【工厂核心类-将它变成接口】,具体的创建产品的工作交给【工厂核心类的子类】
满足了开闭原则:不同产品的创建跑到不同的子工厂,比如创建苹果去苹果工厂,创建香蕉去香蕉工厂,我的工厂核心类只负责定义标准

1、工厂方法模式实例?

水果基类(接口):定义苹果,香蕉的采摘标准:苹果类,香蕉类
水果工厂基类(接口):定义苹果,香蕉的工厂标准:苹果工厂,香蕉工厂
创建苹果去苹果工厂,创建香蕉去香蕉工厂,我的工厂核心类只负责定义标准

2、工厂方法模式对简单工厂模式的修改体现在哪里?

工厂核心类变成了接口:将工厂变成接口,将实际创建工作推迟到子类当中。
工厂核心类成为一个抽象工厂角色:这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口
工厂子类完成具体的工厂生成工作

3、工厂方法模式中包含的角色及其职责?

1.抽象工厂(Creator)角色:【比如水果工厂】:工厂方法模式的核心,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete  Creator)角色:【比如苹果工厂,香蕉工厂】:具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
3.抽象(Product)角色:【比如水果接口,比如定义采摘水果的标准】:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色:【比如苹果,香蕉】:工厂方法模式所创建的具体实例对象。

4、工厂方法模式的别名是什么?

多态工厂模式:因为具体工厂类都有共同的接口,或者有共同的抽象父类。

5、工厂方法模式的核心是什么?

抽象工厂类

6、工厂方法模式的好处是?

符合“开放-封闭”原则:当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端

7、“开放-封闭”原则是什么意思?

开放:有很好的扩展性
封闭:扩展的时候不去修改原来的类

8、创建型设计模式的作用是什么?

在类创建的时候定义标准,发挥作用

9、legend2系统中应该工厂方法模式实例?

抽象产品:英雄(接口),里面有个__construct()创建英雄的抽象方法,或者有一个写入数据库数据的抽象方法,还有生成资质,生成属性的抽象方法
具体产品:人族英雄,魔族英雄,仙族英雄,__construct()创建英雄完成就写入数据库
抽象工厂角色:英雄工厂(接口),里面有个getHero抽象方法
具体工厂角色:人族英雄工厂,魔族英雄工厂,返回英雄对象的工厂,创建英雄对象对的时候把英雄对象的数据写到数据库

10、如何在实例中使用工厂方法模式?

实例对应角色:用实例对应好工厂方法模式的四种角色即可,这样建模超级简单,(抽象产品,具体产品,抽象工厂角色,具体工厂角色)

11、php中的面向对象是在什么阶段发挥作用?

向页面传递数据 和  向数据库书写数据 的时候

二、内容在总结中

1、相关知识

2、java代码结构

3、php代码

<?php
//抽象角色
Interface Fruit{
    //采集
    public function get();
};

//具体角色1
class Apple implements Fruit{
    public function get(){
        echo '采集苹果<br>';
    }
}
//具体角色2
class Banana implements Fruit{
    public function get(){
        echo '采集香蕉<br>';
    }
}

//抽象工厂角色
interface FruitFactory{
    //定义工厂生产产品的规则
    public static function getFruit();
}

//具体工厂角色1:苹果
class AppleFactory implements FruitFactory{
    public static function getFruit(){
        return new Apple();
    }
}
//具体工厂角色2:香蕉
class BananaFactory implements FruitFactory{
    public static function getFruit(){
        return new Banana();
    }
}

//调用实例
AppleFactory::getFruit()->get();
BananaFactory::getFruit()->get();
?>
 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/10947392.html