whcoding whcoding
首页
归档
关于
GitHub (opens new window)
首页
归档
关于
GitHub (opens new window)
  • 设计模式概述
  • 工厂方法模式
  • 简单工厂模式
    • 原型模式
    • 设计模式
    whcoding
    2020-09-27
    目录

    简单工厂模式

    # 简单工厂模式

    • 创建型模式
    • 作用: 实现了创建者和调用者分离

    # 举个栗子

    假设:用户需要买车,每一个车就是一个类, 每一个类都需要new一次, 周一买特斯拉 周二买奥迪 周三买宝马 这样每次都会更改大量的代码.

    # 常规流程图:

    54392-7exbf5aattw.png

    # 常规的代码:

    // $car = new Tesla();
    // $car = new Audi();
    $car = new Benz();
    
    echo $car->name();
    
    1
    2
    3
    4
    5

    # 简单工厂模式流程图:

    15604-gnmgunoifja.png

    # 简单工厂模式代码:

    工厂文件代码:

    class Factory
    {
        public static function GetLogic($carName)
        {
            $instance = null;
            if ($carName == '奥迪') {
               $instance = new Audi();
            } elseif ($carName == '宝马') {
                $instance = new Benz();
            } elseif ($carName == '特斯拉') {
                $instance = new Tesla();
            }
            return $instance;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    用户文件代码:

    $myCar = Factory::GetLogic('宝马');
    echo $myCar->name();
    
    1
    2

    # 总结:

    优点

    • 一个调用者想创建一个对象, 只要知道其名称就可以了.
    • 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以.
    • 屏蔽了类的具体实现, 调用者只关心产品的接口.

    缺点

    • 每次增加一个产品时, 都需要修改一个具体类和对象实现工厂, 使得系统中类的个数成倍增加, 在一定程度上增加了系统的复杂度, 同时也增加了系统具体类的依赖
    • 同时也违背了设计模式的开闭原则, 因为每次增加一辆车或产品的类都需要去修改工厂方法, 正因为这个原则所以就有了 方法工厂模式

    # 完整示例代码:

    Github (opens new window)

    #设计模式
    上次更新: 2022/08/30, 23:31:20
    工厂方法模式
    原型模式

    ← 工厂方法模式 原型模式→

    Theme by Vdoing | Copyright © 2018-2023
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式