zoukankan      html  css  js  c++  java
  • 北风设计模式课程---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();
    ?>
     
  • 相关阅读:
    【YbtOJ#20064】预算缩减
    【GMOJ6805】模拟speike
    【洛谷P5675】取石子游戏
    【YbtOJ#20061】波动序列
    【洛谷P4302】字符串折叠
    flash 上传文件
    HTTP 客户端发送的 头 格式
    FLEX 在本地使用 只访问本地文件
    as3 重写
    iis7 上传限制问题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10947392.html
Copyright © 2011-2022 走看看