登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
重温设计模式 --- 抽象工厂模式
重温设计模式 --- 抽象工厂模式
[ 复制链接 ]
郦惠
2025-6-6 20:44:50
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
引言
抽象工厂模式
一种创建型设计模式,它提供了一种方式来封装一组具有相同主题的工厂,而不必指定它们具体的类。这样,客户端代码就可以使用抽象工厂来创建一组相关的对象,而不必关心实际创建的具体类。
抽象工厂模式有以下几个主要角色:
抽象工厂(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
758
饮邺谲
2026-02-28
安全
聚合系统设计:策略模式(Strategy Pattern)在银行通道对接场景中的应用
4
331
呈步
2026-03-01
业界
三层抽象结构:一种可复用的抽象层设计词汇
2
151
赘暨逢
2026-03-05
业界
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
1
38
官厌
2026-03-09
业界
Kind 环境下 Flannel IPsec 模式跨节点通信故障排查流程
1
45
公西颖初
2026-03-09
业界
Cursor 四种交互模式
0
1059
荦绅诵
2026-03-10
业界
AI时代,重温10大经典排序算法
0
304
丰江
2026-03-26
业界
1、SEATA分布式事务——XA模式
1
969
能杜孱
2026-03-28
安全
笔记:WPF MVVM 模式下通过消息机制获取自定义对话框数据
0
439
锑砖
2026-03-28
安全
2、SEATA分布式事务——AT模式
1
22
申倩语
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
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
梨恐
2025-12-31 03:00:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
伯斌
2026-1-11 13:03:03
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
嗅叽
2026-1-15 21:43:14
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
鼓励转贴优秀软件安全工具和文档!
茅断卉
2026-1-20 22:44:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
恃液
2026-1-21 11:28:12
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
米榜饴
2026-1-25 04:51:45
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
明思义
2026-1-26 10:23:47
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
酝垓
2026-1-26 11:48:57
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
祉遛吾
2026-1-27 02:41:31
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
役魅肋
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
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,学习下。
敕码
2026-2-1 05:49:39
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
少琼
2026-2-4 22:03:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
秤陷曲
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
粉丝关注
22
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9534
6
韶又彤
9913
7
荪俗
9029
8
宋子
9875
9
蓬森莉
9871
10
俞瑛瑶
10000
查看更多
今日好文热榜
0
SpringCloud进阶--MySQL主从复制、分库分表
0
企业数字化转型避坑指南:这10个“雷区”90
445
题解:ABC394F - Alkane
885
Kthena + vLLM-Ascend:云原生大模型推理的
187
题解:ABC394F - Alkane
0
SpringCloud进阶--MySQL主从复制、分库分表
1
SpringCloud进阶--MySQL主从复制、分库分表
1
SpringCloud进阶--MySQL主从复制、分库分表
0
SpringCloud进阶--MySQL主从复制、分库分表
0
SpringCloud进阶--MySQL主从复制、分库分表
1
SpringCloud进阶--MySQL主从复制、分库分表
1
SpringCloud进阶--MySQL主从复制、分库分表
0
企业数字化转型避坑指南:这10个“雷区”90
0
SpringCloud进阶--MySQL主从复制、分库分表
0
企业数字化转型避坑指南:这10个“雷区”90
1
SpringCloud进阶--MySQL主从复制、分库分表
349
AI开发-python-langchain框架(3-19-智能问
59
一文吃透 Spring AI Alibaba + MCP:服务端
518
AI开发-python-langchain框架(3-19-智能问
310
AI开发-python-langchain框架(3-19-智能问