登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
设计模式(四)建造者
设计模式(四)建造者
[ 复制链接 ]
驼娑
2025-6-9 00:13:13
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
一、定义
讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种创建型模式。
二、描述
包含以下四个角色:
1、Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法:一类是BuildPartX(),用于创建复杂对象的各个部件;另一类是GetResult(),用于返回生成好的复杂对象。Builder既可以是抽象类,也可以是接口。
2、ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确其所创建的复杂对象,还可以提供一个方法返回创建好的复杂产品(该方法也可以由抽象建造者实现)。
3、Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
4、Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其Construct()方法中调用建造者对象的部件构造和装配方法,完成复杂对象的建造。客户端一般只需要和指挥者进行交互,在客户端确定具体建造者类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥类中。
三、例子
X公司要开发一款角色类游戏,角色根据不同情境具有不同能力,并且随着升级增强。角色是个复杂的对象,不同角色其性别、面容、服装、发型等都有所差异。无论何种角色,创建步骤都大同小异,都需要分步骤创建组成部分,再装配成一个完整的角色。
Actor:角色类复杂产品,实际业务较为复杂,示例简化只列出部分属性且类型为string
public class Actor
{
//角色类型
public string Type { get; set; }
//性别
public string Sex { get; set; }
//面容
public string Face { get; set; }
//服装
public string Costume { get; set; }
//发型
public string HairStyle { get; set; }
}
复制代码
ActorBuilder:游戏角色建造器,充当抽象建造者
public abstract class ActorBuilder
{
protected Actor actor = new Actor();
public abstract void BuildType();
public abstract void BuildSex();
public abstract void BuildFace();
public abstract void BuildCostume();
public abstract void BuildHairStyle();
// 工厂方法 : 返回一个完整的游戏角色对象
public Actor CreateActor()
{
return actor;
}
}
复制代码
HeroBuilder、AngelBuilder和DevilBuilder:英雄角色、天使角色、魔鬼角色,充当具体建造者。
public class HeroBuilder : ActorBuilder
{
public override void BuildType()
{
actor.Type = "英雄";
}
public override void BuildSex()
{
actor.Sex = "男";
}
public override void BuildFace()
{
actor.Face = "英俊";
}
public override void BuildCostume()
{
actor.Costume = "盔甲";
}
public override void BuildHairStyle()
{
actor.HairStyle = "飘逸";
}
}
public class AngelBuilder : ActorBuilder
{
public override void BuildType()
{
actor.Type = "天使";
}
public override void BuildSex()
{
actor.Sex = "女";
}
public override void BuildFace()
{
actor.Face = "漂亮";
}
public override void BuildCostume()
{
actor.Costume = "白裙";
}
public override void BuildHairStyle()
{
actor.HairStyle = "披肩长发";
}
}
public class DevilBuilder : ActorBuilder
{
public override void BuildType()
{
actor.Type = "恶魔";
}
public override void BuildSex()
{
actor.Sex = "妖";
}
public override void BuildFace()
{
actor.Face = "丑陋";
}
public override void BuildCostume()
{
actor.Costume = "黑衣";
}
public override void BuildHairStyle()
{
actor.HairStyle = "光头";
}
}
复制代码
ActorController:角色控制器,充当指挥者
public class ActorController
{
public Actor Construct(ActorBuilder builder)
{
builder.BuildType();
builder.BuildSex();
builder.BuildFace();
builder.BuildCostume();
builder.BuildHairStyle();
return builder.CreateActor(); ;
}
}
复制代码
Program:测试代码
ActorBuilder ab = new HeroBuilder();
ActorController ac = new ActorController();
Actor at = ac.Construct(ab);
Console.WriteLine(at.Type);
Console.WriteLine(at.Sex);
Console.WriteLine(at.Face);
Console.WriteLine(at.Costume);
Console.WriteLine(at.HairStyle);
Console.ReadLine();
复制代码
四、总结
1、优点
(1)在建造者模式中,客户端不必知道产品内部的组成细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
(2)没一个具体建造者都相对独立,与其他的具体建造者无关,因此新增与替换具体建造者很方便,由于指挥者类针对抽象建造者编程,增加新的具体建造者无需修改原有类库的代码,系统扩展比较方便,符合开闭原则
(3)用户可以更加精细地控制产品的创建过程,将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程
2、缺点
(1)建造者模式所创建产的品都具有一些较多的共同点,其组成部分相似,如果差异性很大,例如很多组成部分不同,那么则不适合使用建造者模式。
(2)如果产品的内部结构复杂多变,可能会需要定义很多具体构建者来实现这些变化,导致系统变得很庞大,增加了系统的理解难度和运行成本
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
设计模式
建造者
相关帖子
没听说过设计模式?保姆级教程来了!
设计模式之单例模式
Spring用到的10种设计模式,真巧妙!
设计模式-单例模式
设计模式-工厂模式
优化 if/else 的四种设计模式
设计模式之 Target/Action
软件设计模式系列之四——简单工厂模式
解析设计模式与设计原则:构建可维护性和可扩展性代码的重要性
Go语言实现GoF设计模式:适配器模式
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
没听说过设计模式?保姆级教程来了!
3
500
涣爹卮
2025-07-09
安全
设计模式之单例模式
3
159
颖顿庐
2025-09-03
业界
Spring用到的10种设计模式,真巧妙!
1
316
崔和美
2025-09-24
业界
设计模式-单例模式
6
471
颖顿庐
2025-09-25
业界
设计模式-工厂模式
2
839
毡轩
2025-09-25
业界
优化 if/else 的四种设计模式
3
716
湄圳啸
2025-09-29
安全
设计模式之 Target/Action
7
595
甦忻愉
2025-09-30
安全
软件设计模式系列之四——简单工厂模式
2
1076
愆蟠唉
2025-10-10
安全
解析设计模式与设计原则:构建可维护性和可扩展性代码的重要性
3
549
涂流如
2025-10-11
安全
Go语言实现GoF设计模式:适配器模式
4
487
柩通奉
2025-11-19
回复
(4)
东门芳洲
2025-10-25 00:47:37
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
汇干环
2025-10-31 03:43:57
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
寇秀娟
2025-11-27 09:12:45
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
杠氯
3 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
分享、互助 让互联网精神温暖你我
鞭氅
前天 14:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
驼娑
前天 14:05
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
246
RSA加密
316
pydash原型链污染
176
大模型榜单周报(2025/12/08—2025/12/12)
849
当你不再迷信“最强模型”,系统设计才刚刚
876
软件i2c
301
2025年专业起名老师联系方式汇总:全国资深
652
解码IP协议号:网络世界的“货物运单”
712
Python Selenium 漫步指南:从入门到精通
643
AI 付费模式终极对比:ChatGPT、Gemini、Cl
838
JSAPIThree 加载 3D Tiles 学习笔记:大规
358
LLM 工具调用的范式演进与认知模型集成
355
Requirements Engineering with AI for Con
343
【节点】[Adjustment-WhiteBalance节点]原
303
上海专业建筑维修服务解析:标准化流程如何
947
【分析式AI】-带你弄懂XGBoost模型
731
【分析式AI】-带你弄懂XGBoost模型
53
【分析式AI】-带你弄懂XGBoost模型
274
C语言之统计天数
241
如何使用DashVector的多向量检索
272
【分析式AI】-朴素贝叶斯算法模型