zoukankan      html  css  js  c++  java
  • 设计模式(三)——工厂方法模式

    简单工厂模式 + “开闭原则” = 工厂方法模式

    抽象工厂(Abstract Factory)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。
    工厂(Concrete Factory)角色:具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
    抽象产品(Abstract Product)角色:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
    具体产品(Concrete Product)角色:工厂方法模式所创建的具体实例对象。

    优点
    1. 不需要记住具体类名,甚至连具体参数都不用记忆。
    2. 实现了对象创建和使用的分离。
    3. 系统的可扩展性也就变得非常好,无需修改接口和原类。
    缺点
    1. 增加系统中类的个数,复杂度和理解度增加。
    2. 增加了系统的抽象性和理解难度。

    适用场景
    1.客户端不知道它所需要的对象的类。
    2.抽象工厂类通过其子类来指定创建哪个对象

    #include <iostream>
    using namespace std;
    
    class Fruit
    {
    public:
        virtual void get_name() = 0;
    };
    
    class Apple :public Fruit
    {
    public:
        virtual void get_name()
        {
            cout << "我是苹果" << endl;
        }
    };
    
    class Banana :public Fruit
    {
    public:
        virtual void get_name()
        {
            cout << "我是香蕉" << endl;
        }
    };
    
    // 抽象工厂
    class AbstractFactory
    {
    public:
        virtual Fruit* create_fruit() = 0;
    };
    
    // apple工厂
    class AppleFactory :public AbstractFactory
    {
    public:
        virtual Fruit* create_fruit()
        {
            return new Apple;
        }
    };
    
    // Banana工厂
    class BananaFactory :public AbstractFactory
    {
    public:
        virtual Fruit* create_fruit()
        {
            return new Banana;
        }
    };
    
    int main()
    {
        // 1. 给我来一个香蕉工厂
        AbstractFactory* factory = new BananaFactory;
        // 2. 给我来一个水果
        Fruit* fruit = factory->create_fruit();// 只能够产生香蕉 // 多态
        fruit->get_name();
    
        delete factory;
        delete fruit;
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    前端git开发分支各种场景管理
    RxJS Subject学习
    微信小程序登陆流程(20200322)
    vue依赖收集的策略
    eggjs2.x版本异步获取config配置方案
    dubbo连接过程
    计算机中对流的理解
    Egg.js运行环境配置场景
    Promise和Observable的映射
    eggjs异常捕获机制
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10356847.html
Copyright © 2011-2022 走看看