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

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

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

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

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

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

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

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

简单工厂模式的理念:

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

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

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

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

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

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

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

#include<iostream>
#include<fstream>
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();
}

相关推荐
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
leeyi1 天前
两个 Agent 怎么协作:Host-Worker 模式(第91篇-E77)
设计模式·agent·ai编程
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-26-策略模式(业务实战篇)
java·spring·设计模式·策略模式·支付系统·算法切换
星火10242 天前
【Groovy翻译-进阶篇】Groovy 中的设计模式
后端·设计模式·groovy
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-27-策略模式(源码剖析篇)
java·spring·设计模式·策略模式·源码分析·事务管理·comparator
SL_staff2 天前
风控规则如何从硬编码解耦?我们在 JVS-Rules 中的实践与思考
java·spring boot·设计模式
小此方2 天前
Linux加餐(一):藏在Linux中的设计模式(一)策略模式与日志
linux·设计模式·策略模式
To_OC3 天前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
东方小月3 天前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
程序员贺加贝3 天前
轻制造SaaS的生产闭环建模-BOM工单领料报工质检与入库
java·设计模式·架构