最新要闻
- 篮球赛中延续运动激情 绿叶大联盟搭建校际平台 丰富校园体育
- 家庭影院装修设计说明(家庭影院装修设计)
- 卡密城1号_卡密城
- 手机基带坏了什么症状
- 登封市税务局:“电子化送达”送出便民办税新速度
- 央企布局战略性新兴产业支持政策有望出台 国字头基金投资发力
- 不再是特斯拉 林志颖驾驶小鹏G6被拍到 网友盛赞:被圈粉
- 华为手机王者归来!Mate 60冲上热搜:线下门店排长队抢购、限量卖
- 不要9块9、“写真”零元购!妙鸭挑战者出现:可白嫖25张
- 2299元起 OPPO Watch4 Pro手表发布:60秒体检识别4大风险
- 引擎盖弹起砸向挡风玻璃 高速上两眼一抹黑 司机教科书式脱困
- “Z世代”外国青年走进东郊记忆 感受“新与旧的碰撞”
- 蓝山:邓群主持召开第十八届县人民政府第30次常务会议
- 【CAE案例】空气喷泉实验中气体分层破坏现象的数值研究
- 为自救,碧桂园13亿卖掉广州“百亿神盘”股权
- 前三季度生猪价格整体处于较好的态势
手机
2023税务师考前80天冲刺刷题资料要用对!
“情歌王子”邰正宵来扬举办歌友会
- 2023税务师考前80天冲刺刷题资料要用对!
- “情歌王子”邰正宵来扬举办歌友会
- 联发科天玑携手vivo、iQOO带来大波福利,“天玑京东品牌日”钜惠来袭!
- 证监会进一步规范股份减持行为
- 易德龙7月4日快速上涨
- 百合花定增募获上交所通过 东方投行建功
家电
【23种设计模式】建造者模式(四)
前言
在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?那就是今天分享的建造者模式,又叫生成器模式,英文名称是Builder Pattern。
(资料图)
建造者模式定义
在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:汽车、电脑和手机等等。它们是一个复杂的物品,主要是由各种零部件组装而成的,他们的组装过程是固定的。就拿汽车来说,组装流水线是固定的,不变的,需要把底盘、车轮、车门、车灯、发动机引擎、车灯和排气筒等等组装在一起。但是由于需求的变化,这个汽车复杂对象针对不同的品牌,各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。建造者设计模式定义就是将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
建造者模式组成
(1)抽象建造者角色(Builder):为创建一个Product对象的各个部件指定抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此角色规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
(2)具体建造者(ConcreteBuilder)
- 实现Builder的接口以构造和装配该产品的各个部件。即实现抽象建造者角色Builder的方法。
- 定义并明确它所创建的表示,即针对不同的商业逻辑,具体化复杂对象的各部分的创建。
- 提供一个检索产品的接口。
- 构造一个使用Builder接口的对象即在指导者的调用下创建产品实例。
(3)指导者(Director):调用具体建造者角色以创建产品对象的各个部分。指导者并没有涉及具体产品类的信息,真正拥有具体产品的信息是具体建造者对象。它只负责保证对象各部分完整创建或按某种顺序创建。
(4)产品角色(Product):建造中的复杂对象,对应这具体的产品。它要包含那些定义组件的类,包括将这些组件装配成产品的接口。
建造者模式代码实现
抽象建造者
/// /// 抽象建造者,它定义了要创建什么部件和最后创建的结果,但是不是组装的的类型 /// public abstract class Builder { /// /// 创建车门 /// public abstract void BuildCarDoor(); /// /// 创建车轮 /// public abstract void BuildCarWheel(); /// /// 创建车引擎 /// public abstract void BuildCarEngine(); /* * 当然还有部件: * 大灯 * 地盘 * .... * .... */ /// /// 获得组装完成的汽车 /// /// public abstract Car GetCar(); }
具体建造者
别克:
/// /// 具体建造者,具体的车型的建造者,例如:别克 /// public sealed class BuickBuilder : Builder { Car buickCar = new Car("别克"); public override void BuildCarDoor() { buickCar.Add("Buick"s Door"); } public override void BuildCarWheel() { buickCar.Add("Buick"s Wheel"); } public override void BuildCarEngine() { buickCar.Add("Buick"s Engine"); } public override Car GetCar() { return buickCar; } }
奥迪:
/// /// 具体建造者,具体的车型的建造者,例如:奥迪 /// public sealed class AoDiBuilder : Builder { Car aoDiCar = new Car("奥迪"); public override void BuildCarDoor() { aoDiCar.Add("Aodi"s Door"); } public override void BuildCarWheel() { aoDiCar.Add("Aodi"s Wheel"); } public override void BuildCarEngine() { aoDiCar.Add("Aodi"s Engine"); } public override Car GetCar() { return aoDiCar; } }
汽车固定组装流程定义
/// /// 汽车类 /// public sealed class Car { // 汽车部件集合 private IList parts = new List(); //汽车品牌名 private string _brandName; /// /// 构造函数 /// /// public Car(string brandName) { _brandName = brandName; } /// /// 把单个部件添加到汽车部件集合中 /// /// public void Add(string part) { parts.Add(part); } /// /// 汽车组装流程 /// public void Assembly() { Console.WriteLine($"{_brandName}汽车开始在组装......."); foreach (string part in parts) { Console.WriteLine("组件" + part + "已装好..."); } Console.WriteLine($"{_brandName}汽车组装完毕........."); } }
指导者
这里才是调用组装的,Construct方法里面的实现就是创建复杂对象固定算法的实现,根据具体需求变化,控制组装的流程顺序,该算法是固定的,或者说是相对稳定的。
/// /// 自动化工厂操控台,也就是建造者模式中的指挥者 /// public class Director { /// /// 自动化算法指导组装汽车 /// /// public void Construct(Builder builder) { builder.BuildCarDoor(); builder.BuildCarWheel(); builder.BuildCarEngine(); /* * 指导其他流程 */ } }
调用
/// /// 测试方法 /// public void RunTest() { Director director = new Director(); //组装别克 Builder buickCarBuilder = new BuickBuilder(); director.Construct(buickCarBuilder); Car buickCar = buickCarBuilder.GetCar(); buickCar.Assembly(); Console.WriteLine("\r\n*****************************\r\n"); //组装奥迪 Builder aoDiCarBuilder = new AoDiBuilder(); director.Construct(aoDiCarBuilder); Car aoDiCar = aoDiCarBuilder.GetCar(); aoDiCar.Assembly(); }
建造者模式优缺点
优点:
使用建造者模式可以使客户端不必知道产品内部组成的细节。
具体的建造者类之间是相互独立的,容易扩展。
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
缺点:
- 产生多余的Build对象以及Director类。
关键词:
【23种设计模式】建造者模式(四)
篮球赛中延续运动激情 绿叶大联盟搭建校际平台 丰富校园体育
“江苏好人”付强为大学新生送上“精神”行李箱
采女经原文及白话译文 采女
金帝股份发行价21.77元/股,超募3亿元,一名自然人网下报出4.52元/股最低价
“夏纳雨林清凉”主题旅游推广活动之漂流趣味挑战赛在五指山举办
工业设计作品集方案 工业设计作品集
中卫鞋匠老贺的风雨30年
资兴:管好用活机构编制为财政减负上亿元
汽车是如何自动泊车的 您还在为泊车技术烦恼吗
公安特警福安协作区开展成建制跨区域拉动增援实战演练
新版的人民币是什么时候出版的(新版人民币什么时候发行)
斗破苍穹迦南学院百年一遇的天赋(斗破苍穹ol迦南加点)
莲花河胡同(关于莲花河胡同简述)
郑州调整完善大中专院校学生医保政策
小学生简单科学实验过程_小学生简单科学实验
魔礼寿是蛇还是花狐貂 魔礼寿
淘宝商品图片大小尺寸_淘宝宝贝图片尺寸大小是多少
莱州一中(关于莱州一中简述)
家庭影院装修设计说明(家庭影院装修设计)
《问道》全新仙元大荒战神即将上线
广州社会保障局(关于广州社会保障局的基本详情介绍)
蚂蚁集团:将在外滩大会披露大模型落地进展
重磅!深圳市公租房申请家庭和单身居民收入财产限额公布
为什么超模的腰并不细?
什么是太空资源?
中元节到了!农历七月鬼门开,想要平安过节,这4大禁忌值得注意
“越南特斯拉”盘中暴涨35%,市值突破2100亿美元,相当于两个高盛
2023税务师考前80天冲刺刷题资料要用对!
彩色光伏 循环低碳
券商热议利好“组合拳”:A股已具备年度配置价值
太极实业上半年净利润为4.27亿元,同比增长378%
“情歌王子”邰正宵来扬举办歌友会
北京101家医疗卫生机构开展医务社工服务
山推股份(000680.SZ):上半年净利润3.02亿元,同比减少24.82%
局部降水量将超50毫米!淄博市发布降雨天气灾害风险预警
"祝小瑞瑞早日康复" 众多爱心汇聚成一句话
收评:两市收高创业板指涨近3% 科创50指数大涨超4% 资金爆买相关ETF
联发科天玑携手vivo、iQOO带来大波福利,“天玑京东品牌日”钜惠来袭!
DIOR迪奥LADY 95.22 经典之美透现新意风尚
32g内存卡多少钱一张相机(32g内存卡多少钱)
国外玩家试玩《星空》 被永久封禁
张颂文问能否出演《一路朝阳》的黎光?高叶回答笑翻全场
广东一中学小卖部招租,5年租金超900万,校内9000人只一家小卖部
投资就是赌国运
花飞花谢花满天下一句 花飞花谢花满天
记者:有了卢卡库罗马肯定能进前四,他不像人们说的那么没用
官方:韩国21岁中后卫李汉范加盟丹麦俱乐部中日德兰
小伙在宝鸡卡乐星球餐厅打暑期工,工资被拖欠一年未付
今日ashdown(ashdown)
证监会进一步规范股份减持行为
莱西市实验小学(关于莱西市实验小学简述)
莱西山揸(关于莱西山揸简述)
[快讯]创远信科公布半年报 净利润同比减少-11.00%
加大营销费投入 上海家化二季度营收恢复增长
俄军战机黑海上空拦截美军两架无人机
美图发布2023上半年财报:净利润同比增长320.4%
易德龙7月4日快速上涨
卡密城1号_卡密城
深圳1-7月经济数据出炉:规上工业增加值同比增长3.8%,新能源汽车产量增长160.1%
蔬菜中蛋白质含量高的蔬菜有哪些?
家红齿科2023年上半年净利152.44万 扭亏为盈
如梦似幻、秋日绽放!快来赏花
合同毁约有什么后果
周大生:2023年上半年净利润同比增长26.45%,拟10股派3元
“不只选好作品,更要选好苗子”——2023青创赛侧记
大庆邮编红岗区(大庆邮编)
定焦和变焦镜头的区别(50定焦适合怎样拍风景)
相亲相爱一家人歌词完整版视频(相亲相爱一家人全部歌词)
环境部:我国海洋生态环境状况总体稳中趋好
百合花定增募获上交所通过 东方投行建功
求闻之若此不若无闻也翻译成英文(求闻之若此不若无闻也翻译)
强降雨致山西阳泉部分县区出现山体滑坡
集成水槽(关于集成水槽的基本详情介绍)
realme两款降噪耳机发布:真我Buds Air5首销299元,真我Buds T300首销199元
金茂服务的2023上半年:穿越周期的高质量发展之路
黄石市个人信用积分系统上线,申领“磁湖分”可享受省内外优惠
手机基带坏了什么症状
让城市闪烁志愿服务光芒——杭州亚运会城市志愿者观察
广州食品安全抽检发现44批次不合格 包括2家幼儿园食堂饭碗
1至7月我国软件业务收入同比增长13.6%
安全检查进企业 防患未然促发展
前7个月电力行业利润增幅领跑 行业加速转型激活电力消费“源动力”
舍小家 顾大家 ——一个平凡职工不平凡的抗灾故事
四川成都:建筑面积144平方米以上房源不再实施公证摇号
中超武汉三镇队:投资人来函确认9月起停止对俱乐部投入资金
余承恩和田曦薇是什么关系 余承恩和陈意涵在一起了吗
浙江12岁女孩确诊甲状腺癌,爸妈懊悔不已!有这症状一定要重视
安徽养老金领取资格认证怎么认证?2023安徽养老金认证时间及操作方法
快速行动 十余家上市公司大股东终止减持
常熟市标准件厂有限公司_常熟市标准件厂
登封市税务局:“电子化送达”送出便民办税新速度
优秀绩效考核方案范本(通用10篇)
央企布局战略性新兴产业支持政策有望出台 国字头基金投资发力
天后世纪同框 观众听不清歌声喊退票 网友:除了孙燕姿梁静茹其余真的不咋样!
不再是特斯拉 林志颖驾驶小鹏G6被拍到 网友盛赞:被圈粉
华为手机王者归来!Mate 60冲上热搜:线下门店排长队抢购、限量卖
不要9块9、“写真”零元购!妙鸭挑战者出现:可白嫖25张
2299元起 OPPO Watch4 Pro手表发布:60秒体检识别4大风险
引擎盖弹起砸向挡风玻璃 高速上两眼一抹黑 司机教科书式脱困