登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
重温设计模式 --- 抽象工厂模式
重温设计模式 --- 抽象工厂模式
[ 复制链接 ]
郦惠
2025-6-6 20:44:50
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
引言
抽象工厂模式
一种创建型设计模式,它提供了一种方式来封装一组具有相同主题的工厂,而不必指定它们具体的类。这样,客户端代码就可以使用抽象工厂来创建一组相关的对象,而不必关心实际创建的具体类。
抽象工厂模式有以下几个主要角色:
抽象工厂(AbstractFactory):声明用于创建抽象产品的操作的接口。
工厂实现(ConcreteFactory):实现创建具体产品对象的操作。
抽象产品(AbstractProduct):声明产品对象类型的接口。
产品实现(Product):定义由相应的具体工厂创建的产品对象,实现AbstractProduct接口。
下面使用C#实现抽象工厂模式:
抽象工厂
定义一个抽象工厂接口,其中包含了创建不同产品的方法:
public interface IAbstractFactory
{
IProductA CreateProductA();
IProductB CreateProductB();
}
复制代码
工厂实现
定义具体的工厂类,实现抽象工厂接口:
public class ConcreteFactory1 : IAbstractFactory
{
public IProductA CreateProductA()
{
return new ConcreteProductA1();
}
public IProductB CreateProductB()
{
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 : IAbstractFactory
{
public IProductA CreateProductA()
{
return new ConcreteProductA2();
}
public IProductB CreateProductB()
{
return new ConcreteProductB2();
}
}
复制代码
在上述示例中,我们定义了两个具体工厂类:ConcreteFactory1和ConcreteFactory2。这两个工厂类都实现了IAbstractFactory接口,并且分别提供了不同的产品实现。
抽象产品
public interface IProductA
{
string GetName();
}
复制代码
产品实现
public class ConcreteProductA1 : IProductA
{
public string GetName()
{
return "ProductA1";
}
}
public class ConcreteProductA2 : IProductA
{
public string GetName()
{
return "ProductA2";
}
}
public interface IProductB
{
string GetName();
}
public class ConcreteProductB1 : IProductB
{
public string GetName()
{
return "ProductB1";
}
}
public class ConcreteProductB2 : IProductB
{
public string GetName()
{
return "ProductB2";
}
}
复制代码
下面,我们可以使用抽象工厂来创建一组相关的对象:
public class Client
{
private IAbstractFactory factory;
public Client(IAbstractFactory factory)
{
this.factory = factory;
}
public void Run()
{
var productA = factory.CreateProductA();
var productB = factory.CreateProductB();
Console.WriteLine(productA.GetName());
Console.WriteLine(productB.GetName());
}
}
static void Main(string[] args)
{
var client1 = new Client(new ConcreteFactory1());
client1.Run();
var client2 = new Client(new ConcreteFactory2());
client2.Run();
}
复制代码
输出:
ProductA1
ProductB1
ProductA2
ProductB2
复制代码
总结
上面的示例中,我们使用抽象工厂模式来创建了一组相关的对象,但是需要注意的是,它适用于创建一组相关的产品对象,但是当产品族的变化引起整个工厂等级结构的变化时,抽象工厂模式就不适用了。
此外,抽象工厂模式还存在一些缺点,例如:
新增产品会导致工厂接口的扩展。如果需要新增产品,就需要修改所有的工厂类,这会带来一些不必要的麻烦。
可能会导致类层次结构的复杂度增加。如果有多个产品族,就需要定义多个工厂接口,这会增加类层次结构的复杂度。
因此,在使用抽象工厂模式时,需要根据具体情况进行权衡和选择。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
重温
设计模式
抽象
工厂
模式
相关帖子
虾皮Shopee铺货模式怎么做?Shopee快速铺货选品技巧分享!
聚合系统设计:策略模式(Strategy Pattern)在银行通道对接场景中的应用
三层抽象结构:一种可复用的抽象层设计词汇
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
Cursor 四种交互模式
AI时代,重温10大经典排序算法
1、SEATA分布式事务——XA模式
笔记:WPF MVVM 模式下通过消息机制获取自定义对话框数据
2、SEATA分布式事务——AT模式
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
虾皮Shopee铺货模式怎么做?Shopee快速铺货选品技巧分享!
2
756
饮邺谲
2026-02-28
安全
聚合系统设计:策略模式(Strategy Pattern)在银行通道对接场景中的应用
4
329
呈步
2026-03-01
业界
三层抽象结构:一种可复用的抽象层设计词汇
2
150
赘暨逢
2026-03-05
业界
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
1
35
官厌
2026-03-09
业界
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
0
44
公西颖初
2026-03-09
业界
Cursor 四种交互模式
0
1059
荦绅诵
2026-03-10
业界
AI时代,重温10大经典排序算法
0
301
丰江
2026-03-26
业界
1、SEATA分布式事务——XA模式
0
965
能杜孱
2026-03-28
安全
笔记:WPF MVVM 模式下通过消息机制获取自定义对话框数据
0
438
锑砖
2026-03-28
安全
2、SEATA分布式事务——AT模式
0
13
申倩语
2026-03-30
回复
(36)
胁冉右
2025-10-13 00:41:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
琉艺戕
2025-12-7 19:21:43
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
坡琨
2025-12-17 08:48:03
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
梨恐
2025-12-31 03:00:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
伯斌
2026-1-11 13:03:03
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
嗅叽
2026-1-15 21:43:14
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
茅断卉
2026-1-20 22:44:54
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
恃液
2026-1-21 11:28:12
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
热心回复!
米榜饴
2026-1-25 04:51:45
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
明思义
2026-1-26 10:23:47
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
酝垓
2026-1-26 11:48:57
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
祉遛吾
2026-1-27 02:41:31
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢,下载保存了
役魅肋
2026-1-28 09:41:20
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
煅汾付
2026-1-28 16:02:51
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
羡渥蛛
2026-1-29 05:48:21
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
敕码
2026-2-1 05:49:39
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
少琼
2026-2-4 22:03:08
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
秤陷曲
2026-2-7 23:57:15
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
釉她
2026-2-8 15:15:36
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
郦惠
2026-2-8 15:15:36
关注
0
粉丝关注
23
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9539
6
宋子
9880
7
韶又彤
9911
8
注思
9034
9
荪俗
9023
10
诀锺
9036
查看更多
今日好文热榜
267
关于“洛谷AI调试助手”的一些观察记录
671
关于“洛谷AI调试助手”的一些观察记录
512
关于“洛谷AI调试助手”的一些观察记录
940
关于列式存储(Column-base Storage)的几
32
Slickflow 与 OpenClaw 结合实践:技术原理
646
【ESP32】ESP32 使用 MQTT 连接华为云 IoT
770
Axios遭供应链投毒攻击(附排查与紧急补救
933
AI 可以取代运维了吗?
84
测试人必备的4个AI Skills(附下载地址和详
75
记一次Webshell流量分析2 | 添柴不加火
454
记一次Webshell流量分析2 | 添柴不加火
140
记一次Webshell流量分析2 | 添柴不加火
728
记一次Webshell流量分析2 | 添柴不加火
69
记一次Webshell流量分析2 | 添柴不加火
413
AI元人文:在荆棘中开路——对四个实践性追
931
记一次Webshell流量分析2 | 添柴不加火
4
Python模块与包管理完全指南:从入门到精通
423
记一次Webshell流量分析2 | 添柴不加火
3
Python模块与包管理完全指南:从入门到精通
273
AI元人文:在荆棘中开路——对四个实践性追