首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
SQL-Server
›
工厂模式 - 工厂方法模式、抽象工厂模式 ...
返回列表
发新帖
工厂模式 - 工厂方法模式、抽象工厂模式
[复制链接]
发表于 2025-11-4 14:27:49
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
弁言
工厂模式(Factory Pattern)是操持模式中创建型模式的一种,它提供了一种创建对象的最佳方式。工厂模式的焦点头脑是将对象的创建与利用分离,使得
代码
更加机动、可扩展。工厂模式重要分为两种:
工厂方法模式
和
抽象工厂模式
。
本文将具体先容工厂方法模式和抽象工厂模式的概念、实现方式以及在C++中的应用。
工厂方法模式
概念
工厂方法模式(Factory Method Pattern)界说了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式让类的实例化推迟到子类。
长处
解耦
:将对象的创建与利用分离,低落
代码
的耦合度。
扩展性好
:新增产物类时,只需增长相应的工厂类,无需修改现有
代码
。
符合开闭原则
:对扩睁开放,对修改关闭。
缺点
类的数量增长
:每增长一个产物类,就须要增长一个对应的工厂类,导致类的数量增长。
复杂性增长
:对于简单的对象创建,利用工厂方法模式大概会增长代码的复杂性。
实现
下面是一个简单的工厂方法模式的实现示例:
#include <iostream>
#include <string>
// 产品接口
class Product {
public:
virtual ~Product() {}
virtual void use() = 0;
};
// 具体产品A
class ProductA : public Product {
public:
void use() override {
std::cout << "Using Product A" << std::endl;
}
};
// 具体产品B
class ProductB : public Product {
public:
void use() override {
std::cout << "Using Product B" << std::endl;
}
};
// 工厂接口
class Factory {
public:
virtual ~Factory() {}
virtual Product* createProduct() = 0;
};
// 具体工厂A
class FactoryA : public Factory {
public:
Product* createProduct() override {
return new ProductA();
}
};
// 具体工厂B
class FactoryB : public Factory {
public:
Product* createProduct() override {
return new ProductB();
}
};
int main() {
Factory* factoryA = new FactoryA();
Product* productA = factoryA->createProduct();
productA->use();
Factory* factoryB = new FactoryB();
Product* productB = factoryB->createProduct();
productB->use();
delete productA;
delete productB;
delete factoryA;
delete factoryB;
return 0;
}
复制代码
应用场景
工厂方法模式实用于以了局景:
不确定对象的范例
:当创建对象时,不确定具体要创建哪种范例的对象。
须要扩展
:当须要扩展体系,增长新的产物类时,利用工厂方法模式可以克制修改现有代码。
抽象工厂模式
概念
抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相干或相互依靠对象的接口,而无需指定它们具体的类。抽象工厂模式是工厂方法模式的扩展,它用于创建一组相干的对象。
长处
高内聚
:将相干的产物族会合在一起创建,包管产物族的同等性。
解耦
:将产物的创建与利用分离,低落代码的耦合度。
符合开闭原则
:对扩睁开放,对修改关闭。
缺点
类的数量增长
:每增长一个产物族,就须要增长一个对应的工厂类,导致类的数量增长。
复杂性增长
:对于简单的对象创建,利用抽象工厂模式大概会增长代码的复杂性。
实现
下面是一个简单的抽象工厂模式的实现示例:
#include <iostream>
#include <string>
// 抽象产品A
class AbstractProductA {
public:
virtual ~AbstractProductA() {}
virtual void use() = 0;
};
// 具体产品A1
class ProductA1 : public AbstractProductA {
public:
void use() override {
std::cout << "Using Product A1" << std::endl;
}
};
// 具体产品A2
class ProductA2 : public AbstractProductA {
public:
void use() override {
std::cout << "Using Product A2" << std::endl;
}
};
// 抽象产品B
class AbstractProductB {
public:
virtual ~AbstractProductB() {}
virtual void use() = 0;
};
// 具体产品B1
class ProductB1 : public AbstractProductB {
public:
void use() override {
std::cout << "Using Product B1" << std::endl;
}
};
// 具体产品B2
class ProductB2 : public AbstractProductB {
public:
void use() override {
std::cout << "Using Product B2" << std::endl;
}
};
// 抽象工厂
class AbstractFactory {
public:
virtual ~AbstractFactory() {}
virtual AbstractProductA* createProductA() = 0;
virtual AbstractProductB* createProductB() = 0;
};
// 具体工厂1
class ConcreteFactory1 : public AbstractFactory {
public:
AbstractProductA* createProductA() override {
return new ProductA1();
}
AbstractProductB* createProductB() override {
return new ProductB1();
}
};
// 具体工厂2
class ConcreteFactory2 : public AbstractFactory {
public:
AbstractProductA* createProductA() override {
return new ProductA2();
}
AbstractProductB* createProductB() override {
return new ProductB2();
}
};
int main() {
AbstractFactory* factory1 = new ConcreteFactory1();
AbstractProductA* productA1 = factory1->createProductA();
AbstractProductB* productB1 = factory1->createProductB();
productA1->use();
productB1->use();
AbstractFactory* factory2 = new ConcreteFactory2();
AbstractProductA* productA2 = factory2->createProductA();
AbstractProductB* productB2 = factory2->createProductB();
productA2->use();
productB2->use();
delete productA1;
delete productB1;
delete factory1;
delete productA2;
delete productB2;
delete factory2;
return 0;
}
复制代码
应用场景
抽象工厂模式实用于以了局景:
产物族
:当须要创建一组相干的产物时,利用抽象工厂模式可以包管产物族的同等性。
跨平台
:当须要为差别的平台创建一组相干的产物时,利用抽象工厂模式可以方便地切换平台。
总结
工厂模式是一种非常实用的操持模式,它将对象的创建与利用分离,使得代码更加机动、可扩展。工厂方法模式实用于创建单一产物,而抽象工厂模式实用于创建一组相干的产物。在实际开辟中,根据具体需求选择符合的工厂模式,可以进步代码的可维护性和可扩展性。
盼望本文能资助你更好地明确工厂方法模式和抽象工厂模式的概念、实现方式以及应用场景。假如你有任何标题或发起,接待在批评区留言讨论。
回复
使用道具
举报
返回列表
浏览过的版块
Oracle
运维.售后
数据仓库与分析
DevOps与敏捷开发
程序人生
Java
分布式数据库
IT职场那些事
前端开发
风雨同行
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表