
4.建造者模式(Builder Pattern)
发布日期:2021-05-10 05:01:35
浏览次数:35
分类:原创文章
本文共 2370 字,大约阅读时间需要 7 分钟。
建造者模式
在日常生活中有这样一个场景,我想要一台电脑,但是我又不想要自己买配件组装,于是找到一个店铺把找到满意的电脑下单,商家在收到我的订单之后,开始安排技术人员组装,组装好之后再把电脑寄过来。
对于一台电脑来说,里面包含CPU、主板、显卡、内存、硬盘、电源、机箱等等配置,可以把电脑当成一个复杂的对象,CPU,主板等电脑配件,又有很多种选择,但是组装电脑的过程基本是一样的,这时候就可以用建造者模式实现这一过程。
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
我们来已创建一个水杯举例子,代码如下。
using System;namespace _04_Builder{ /// <summary> /// 建造者 /// </summary> class Program { static void Main(string[] args) { //小明要制作一个运动水杯 Builder b1 = new SportCupBuilder(); Director director = new Director(b1); director.Create(); Cup cup = new Cup(); cup.Drink(); Console.ReadKey(); } } public class Director { Builder b = null; public Director(Builder builder) { b = builder; } public void Create() { b.BuildString(); b.BuildCap(); b.BuildBody(); } } //我想定制个水杯 public abstract class Builder { public abstract void BuildString(); public abstract void BuildCap(); public abstract void BuildBody(); } /// <summary> /// 运动水杯 /// </summary> public class SportCupBuilder : Builder { public override void BuildString() { Console.WriteLine("经历一番工作把杯子绳做好了"); } public override void BuildCap() { Console.WriteLine("杯盖做好了"); } public override void BuildBody() { Console.WriteLine("杯子主体做好了"); } } //这是我们要制作的水杯 public class Cup { private string myString;//绳子 private string body; //主体 private string cap; //杯盖 public string MyString { get { return myString; } set { myString = value; } } public string Body { get { return body; } set { body = value; } } public string Cap { get { return cap; } set { cap = value; } } public void Drink() { Console.WriteLine("喝水。。。吨吨吨"); } }}
如果说需要在创建另外的一种水杯,同样是又杯绳,杯盖,杯体组成的话,就可以仿照SportCupBuilder
方法在写一个方法继承自Builder
即可。
发表评论
最新留言
很好
[***.229.124.182]2025年04月17日 05时54分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
maven 必会常用命令
2019-03-15
Spring 和 DI 依赖注入
2019-03-15
Java json 数据格式封装
2019-03-15
中序线索二叉树的遍历
2019-03-15
文字策略游戏 android studio(学习intent,textview,等等)
2019-03-15
laravel server error 服务器内部错误
2019-03-15
17_注册Github账号
2019-03-15
gcc编译c文件生成可执行文件
2019-03-15
Linux驱动实现GPIO模拟I2C读写操作
2019-03-15
python爬取中庸词诗词保存mysql数据库源码
2019-03-15
java mysql大学生求职网站没有后台管理源码
2019-03-15
React超级开发指南
2019-03-15
.Net Core API的一个Json转换Help类
2019-03-15
MSSQL/SQLServer中UPDATE或INSERT依次递增做假数据的实现
2019-03-15
Jquery中的正则表达式
2019-03-15
JS日历
2019-03-15
2021-01-09
2019-03-15