• 设计模式(三)——工厂方法模式


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

    抽象工厂(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;
    }
  • 相关阅读:
    [BZOJ3997][TJOI2015]组合数学(Dilworth定理+DP)
    [BZOJ4000][TJOI2015]棋盘(状压DP+矩阵快速幂)
    BZOJ2462[Beijing2011]矩阵模板(二维Hash)
    [BZOJ2458][BeiJing2011]最小三角形(分治)
    [HDU5354]Bipartite Graph(CDQ分治+并查集)
    [NOIP2017]时间复杂度(模拟)
    [Luogu2540][NOIP2016]斗地主增强版(搜索+DP)
    [Luogu1979][NOIP2013]华容道(BFS+SPFA)
    WQS二分题集
    [CC-XXOR]Chef and Easy Problem
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10356847.html
Copyright © 2020-2023  润新知