前言

本来以为这个模式也很简单呢,结果和小弟两个人被它玩了好几个小时。不过最终我们还是战胜了它,太有成就感了!
下面来讲一下我的认识。
(这里先说一点,客户端代码是写在窗体的picturebox里面的)

建造者模式

英文:Builder
又名:生成器模式

what

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
它可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
使用建造者模式,用户只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。

结构图:


拿这次代码的建造小人来举例子,分别解释一下组成部分:

Builder:
抽象类→建造小人的各个部分。概括来说,是为了创建一个product对象的各个部件指定的抽象接口。

ConcreteBuilder:
具体的小人建造者,具体实现如何画出小人的各个部分。是一个具体建造者,实现Builder接口,构造和装配各个部件

Product:
具体的小人,具体产品角色

Director:
指挥者,用来根据用户的需求来构建小人对象。,主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

场景

我们去饭馆吃饭时,没准今天老板心情不好,多放了一些盐,这次的美食相遇可能就不欢而散了。那么为什么肯德基麦当劳的食品每次都是同一个味道呢?因为他们不是凭感觉去做菜,而是依据流程,到哪一步都有严格的规定。与其说是规定,还不如说是,模板。这里感觉像是在介绍之前刚学到的模板方法模式啊。但是肯定二者还是有区别的。以后会再进行剖析。将固定的每一步都设置成一个类,其他需求再去建造。就像吃肯德基一样,同样都是油炸食品,有的人要加辣椒,有的人则要番茄。但是工序的每一步都是相同的。哪一味配料丢失也会造成味蕾的嫌弃。

应用

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

代码展示

今天敲的这个是在form里面运行的。这里有个新知识点,就是需要引用drawing。否则

抽象建造类: 引用drawing

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing ;namespace 建造者模式1
{abstract class PersonBuilder{protected Graphics g;  //引用drawingprotected Pen p;public PersonBuilder(Graphics g, Pen p){this.g = g;this.p = p;}//各个部位public abstract void BuildHead();public abstract void BuildBody();public abstract void BuildArmLeft();public abstract void BuildArmRight();public abstract void BuildLegLeft();public abstract void BuildLegRight();}

具体类—瘦子类:

using System.Drawing ;namespace 建造者模式1
{class PersonThinBuilder:PersonBuilder {public PersonThinBuilder (Graphics g,Pen p):base(g,p){}//重写抽象方法public override void BuildHead(){g.DrawEllipse (p,50,20,30,30);}public override void BuildBody(){g.DrawRectangle (p,60,50,10,50);}public override void BuildArmLeft(){g.DrawLine (p,60,50,40,100);}public override void BuildArmRight(){g.DrawLine (p,70,50,90,100);}public override void BuildLegLeft(){g.DrawLine (p,60,100,45,150);}public override void BuildLegRight(){g.DrawLine (p,70,100,85,150);}}

指挥者类:

class PersonDirector{private PersonBuilder pb;public PersonDirector(PersonBuilder pb){this.pb = pb;}public void CreatePerson(){pb.BuildHead();pb.BuildBody();pb.BuildArmLeft();pb.BuildArmRight();pb.BuildLegLeft();pb.BuildLegRight();}

窗体:
加载一个picturebox控件,单击完成实现。

//这里也要引用drawing
public partial class Form1 : Form{public Form1(){InitializeComponent();}private void pictureBox1_Click(object sender, EventArgs e){Pen p = new Pen(Color.Red);PersonThinBuilder ptb = new PersonThinBuilder(pictureBox1.CreateGraphics(), p);PersonDirector pdThin = new PersonDirector(ptb);pdThin.CreatePerson();Console.ReadLine();}}

效果图:

一个小人儿就这样出来啦!

后记

吐槽:
看一下小弟的小人儿:
只有头。。。。

只有半身。。。

我们两个神人还很认真的挑代码的错,结果。。。
picturebox控件放的太小了,以至于里面只能放下半张头!哈哈~真是笑煞老夫~~
(笑得眼泪都出来啦)

看来以后再调试,不能只局限于代码啊,真的是要统观全局,面面俱到!走起~

C#设计模式之建造者模式相关推荐

  1. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  2. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  3. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  4. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  5. 建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例

    本文实例讲述了PHP设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式: 将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1). 来点我人类能听懂的话: 1.在客户端看来需 ...

  6. C#设计模式之四建造者模式(Builder Pattern)【创建型】

    一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...

  7. 学习《图说设计模式》建造者模式

    图说设计模式之建造者模式 1. 模式动机 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这 ...

  8. 实践GoF的23种设计模式:建造者模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

  9. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  10. python设计模式之建造者模式

    python设计模式之建造者模式 ​ 建造者模式的适用范围:想要创建一个由多个部分组成的对象,而且它的构成需要一步接一步的完成.只有当各个部分都完成了,这个对象才完整.建造者模式表现为复杂对象的创建与 ...

最新文章

  1. 关于Android开源库分享平台,(GitClub)微信小程序的开发体验
  2. 获取指定文件夹下的所有文件名
  3. vue导入非es6 js文件_Vue项目兼容IE11
  4. rhel5.5_Apache配置openssl支持https服务
  5. SAP Cloud for Customer的work center显示逻辑
  6. vue 指令 v-on 函数传参
  7. Runner站立会议05
  8. java基础编程思想题目2
  9. 针对github权限导致hexo部署失败的解决方案
  10. 集算器协助MongoDB计算之交叉汇总
  11. hadoop与mysql的区别_数据库与hadoop与分布式文件系统的区别和联系
  12. sql 在排序后limit 查询疑问
  13. python需要编译_Python编译安装
  14. 遗传算法求解TSP问题及MTATLAB代码
  15. Python开发之路(1)— 使用Pyaudio进行录音和播音
  16. c语言代码量统计工具
  17. Web自动化漏洞检测工具:Xray
  18. 华三模拟器启动设备失败【启动设备MSR36-20_1失败】
  19. 蓝蓝算法10-数字颠倒
  20. 12-18-2018学习2.410.6

热门文章

  1. ACW各种dp模板题 day29
  2. 英语口语273之每日十句口语
  3. 【深度学习】AI芯片:上游产业率先爆发
  4. 水星:清洁能源的星球
  5. 新媒体运营面试如何一开口就让HR给你满分
  6. 纯电动汽车Matlab Simulink软件模型,纯电动汽车动力性、经济性仿真模型
  7. VScode SSH 远程连接时一直输入密码的问题
  8. 重启linux后无法ssh登录
  9. Web server failed to start. Port XXX was already in use.【完美解决方案】
  10. 好用免费的OCR文字识别网站有哪些?亲测好用