• 设计模式之——简单工厂模式


    上图为简单工厂模式的架构图。

    1,产品(Product) 将会对接口进行声明。

    2,具体产品(Concrete Products)是产品接口的不同实现。

    3,创建者(Concrete Creators)将会重写基础工厂方法,使其返回不同类型的产品。

    工厂模式在跨平台的对话框的应用:

           在不同的操作系统下,UI组件外观或许略有不同,但其功能保持一致。Windows系统中的按钮

           在Linux系统中仍是按钮,如果用工厂方法,就不需要为每种操作系统重写对话框逻辑。

    简单工厂模式的理念:

    1,对扩展开放,对修改关闭,当业务需要扩展或修改时,尽可能少的修改代码,以增加代码来代       替修改

    2,依赖倒置,避免依赖具体的类,尽量依赖抽象的类,具体类虚继承抽象类  以此实现间接依赖。

          可以避免创建者和具体产品之间的紧密耦合。

    3,单一职责原则。将产品创建代码放在程序的单一位置,从而使得代码更容易维护。

    4,针对接口编程,不要针对实现编程

    【缺点】:应用工厂方法模式需要引入许多新的子类,代码可能会因此变得更复杂,最好的情况是

                      将该模式引入创建者类的现有层次结构中。

    #include
    #include
    using namespace std;


    //交通方式
    class Transport
    {
    public:
        virtual void doworking() = 0;
    };

    //卡车运输
    class Truck : public Transport
    {
    public:
        virtual void doworking()
        {
            cout << "卡车运输" << endl;
        }
    };

    //轮船运输
    class Ship : public Transport
    {
        virtual void doworking()
        {
            cout << "轮船运输" << endl;
        }
    };


    //物流
    class  Logistics
    {
    public:
        virtual ~Logistics() {}
        virtual Transport* factory() = 0;
        void  dosomething()
        {
            Transport* tran = factory();
            tran->doworking();
        }
    };

    //陆上物流
    class TruckLogistics : public Logistics
    {
    public:
        virtual ~TruckLogistics() {}
        virtual Transport* factory()
        {
            return  new  Truck;
        }
    };

    //海上物流
    class  ShipLogistics : public  Logistics
    {
    public:
        virtual  ~ShipLogistics() {}
        virtual Transport* factory()
        {
            return  new  Ship;
        }
    };

    int main()
    {
        Logistics* log = new ShipLogistics();
        log->dosomething();
    }

  • 相关阅读:
    C和指针 第14章 预处理器 14.2 #define
    《码处高效:Java开发手册》之代码风格
    vue项目中页面跳转传参的方法
    【MySQL】MySQL表之联合查询(多表查询)
    产品的竞争力是什么
    Redis未授权访问漏洞实战
    idea 如何 进行无限续期
    核电工程能源行业案例 | 达索系统百世慧®
    关于QT6实现翻金币小程序的避坑指南
    PCL 使用MLS 上采样
  • 原文地址:https://blog.csdn.net/m0_72753035/article/details/136528343