工厂方法入门


#include <iostream>


// 定义抽象交通工具的基类
// 产品的接口
class Transport {
   
public:
    virtual~Transport() {
   }; // 虚的析构函数
    virtual void deliver() const = 0; // 纯虚函数
};


// 定义卡车交通工具,继承交通工具
// 产品 A 
class Truck :public Transport {
   
public:
    void deliver() const override            // 继承过来的
    {
   
        std::cout << "卡车运输 ..." << std::endl;
    }

};

// 定义轮船交通工具,继承交通工具
// 产品 B
class Ship :public Transport {
   
public:
    void deliver() const override
    {
   
        std::cout << "轮船运输 ..." << std::endl;
    }
};

// 物流公司
// 创造者
class Logistics
{
   
public:
    virtual ~Logistics() {
   };   // 虚的析构函数
    // 工厂方法的核心
    virtual Transport* factoryMethold() const = 0;  // 物流公司创建工厂方法,基类
    void doSomething()
    {
   
        Transport* transport = factoryMethold();
        transport->deliver();
        delete transport;       // 释放指针
    }
};

// 卡车继承物流公司的工程方法,new Truck
// 具体的创造者 A
class TruckLogistics : public Logistics 
{
   
public:
    virtual ~TruckLogistics() {
   };   // 虚的析构函数
    
    Transport* factoryMethold() const override
    {
   
        return new Truck();
    }
};


// 轮船继承物流公司的工程方法,new Ship
// 具体的创造者 B
class ShipLogistics : public Logistics
{
   
public:
	virtual ~ShipLogistics() {
   };   // 虚的析构函数

	Transport* factoryMethold() const override
	{
   
		return new Ship();
	}


};

// 实现创建这就和产品松耦合
int main()
{
   
    

    Logistics* truckLogistics = new TruckLogistics();
    truckLogistics->doSomething();
    delete truckLogistics;

    Logistics* shipLogistics = new ShipLogistics();
    shipLogistics->doSomething();
    delete shipLogistics;

    return 0;
}
  • 对扩展开放,对修改关闭
  • 依赖倒置,避免依赖具体的类,尽量依赖抽象。可以尽量避免抽象。可以避免创建者和具体产品之间的紧密耦合。
  • 单一职责原则,将产品创建代码放在程序的单一位置,从而使得代码更易维护。

**缺点:**应用工厂方式模式需要引入许多新的子类,代码可能会因此编的更加复杂。最好的情况是将该模式引入创建者的现有层次结构中。

相关推荐

  1. 工厂方法入门

    2024-02-01 23:50:03       36 阅读
  2. 工厂方法模式

    2024-02-01 23:50:03       39 阅读
  3. 工厂方法模式

    2024-02-01 23:50:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 23:50:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 23:50:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 23:50:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 23:50:03       18 阅读

热门阅读

  1. LeetCode839. Similar String Groups——并查集

    2024-02-01 23:50:03       29 阅读
  2. Python 机器学习 K-近邻算法 常用距离度量方法

    2024-02-01 23:50:03       36 阅读
  3. Android String.format() 引发的卡顿问题

    2024-02-01 23:50:03       30 阅读
  4. Vue2项目中实现头像上传

    2024-02-01 23:50:03       31 阅读