画胖小人和瘦小人,建造者模式版本
逻辑代码:
1 abstract class PersonBuilder 2 { 3 protected Graphics g; 4 protected Pen p; 5 6 public PersonBuilder(Graphics g, Pen p) 7 { 8 this.g = g; 9 this.p = p; 10 } 11 12 public abstract void BuildHead(); 13 public abstract void BuildBody(); 14 public abstract void BuildArmLeft(); 15 public abstract void BuildArmRight(); 16 public abstract void BuildLegLeft(); 17 public abstract void BuildLegRight(); 18 } 19 20 class PersonThinBuilder : PersonBuilder 21 { 22 public PersonThinBuilder(Graphics g, Pen p) : base(g, p) 23 {} 24 25 public override void BuildHead() 26 { 27 g.DrawEllipse(p, 50, 20, 30, 30); 28 } 29 30 public override void BuildBody() 31 { 32 g.DrawRectangle(p, 60, 50, 10, 50); 33 } 34 35 public override void BuildArmLeft() 36 { 37 g.DrawLine(p, 60, 50, 40, 100); 38 } 39 40 public override void BuildArmRight() 41 { 42 g.DrawLine(p, 70, 50, 90, 100); 43 } 44 45 public override void BuildLegLeft() 46 { 47 g.DrawLine(p, 60, 100, 45, 150); 48 } 49 50 public override void BuildLegRight() 51 { 52 g.DrawLine(p, 70, 100, 85, 150); 53 } 54 } 55 56 class PersonFatBuilder : PersonBuilder 57 { 58 public PersonFatBuilder(Graphics g, Pen p) : base(g, p) 59 {} 60 61 public override void BuildHead() 62 { 63 g.DrawEllipse(p, 150, 20, 30, 30); 64 } 65 66 public override void BuildBody() 67 { 68 g.DrawEllipse(p, 145, 50, 40, 50); 69 } 70 71 public override void BuildArmLeft() 72 { 73 g.DrawLine(p, 150, 50, 130, 100); 74 } 75 76 public override void BuildArmRight() 77 { 78 g.DrawLine(p, 180, 50, 200, 100); 79 } 80 81 public override void BuildLegLeft() 82 { 83 g.DrawLine(p, 160, 100, 145, 150); 84 } 85 86 public override void BuildLegRight() 87 { 88 g.DrawLine(p, 170, 100, 185, 150); 89 } 90 } 91 92 class PersonDirector 93 { 94 private PersonBuilder pb; 95 public PersonDirector(PersonBuilder pb) 96 { 97 this.pb = pb; 98 } 99 public void CreatePerson() 100 { 101 pb.BuildHead(); 102 pb.BuildBody(); 103 pb.BuildArmLeft(); 104 pb.BuildArmRight(); 105 pb.BuildLegLeft(); 106 pb.BuildLegRight(); 107 } 108 }
客户端代码:
1 void Button1Click(object sender, EventArgs e) 2 { 3 Pen p = new Pen(Color.OliveDrab); 4 PersonThinBuilder ptb = new PersonThinBuilder(pictureBox1.CreateGraphics(), p); 5 PersonDirector pdThin = new PersonDirector(ptb); 6 pdThin.CreatePerson(); 7 } 8 void Button2Click(object sender, System.EventArgs e) 9 { 10 Pen p = new Pen(Color.Moccasin); 11 PersonFatBuilder pfb = new PersonFatBuilder(pictureBox1.CreateGraphics(), p); 12 PersonDirector pdFat = new PersonDirector(pfb); 13 pdFat.CreatePerson(); 14 15 }
效果跟上次一样的。
画胖小人和瘦小人,建造者模式版本相关推荐
- 建造者模式——画胖小人和瘦小人
建造者模式(Builder)定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景: 创建复杂对象的算法应该独立于该对象的组成部分,以及他们的装配方式时. ...
- python制作小人,[Python设计模式] 第13章 造小人——建造者模式
题目1 用程序模拟一个画小人的过程,要求小人要有头,身子,左手,右手,左脚,右脚. 基础代码 class PersonDrawer(): def draw(self): print("画头& ...
- 【C#】大话设计模式- 13 建造者模式
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时使用的模式. 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式又称生成 ...
- 组网胖模式_胖AP和瘦AP的区别,组网优缺点分析
满意答案 fengzhu30 2013.04.11 采纳率:47% 等级:9 已帮助:617人 无线AP是access point(无线接入点)的意思,是WLAN网络中的重要组成部分,其作用是把 ...
- 组网胖模式_胖AP和瘦AP的区别、组网优缺点分析
一,什么是AP,胖瘦AP如何区分? 先说说AP的概念.AP是Access Point的简称,即无线接入点,其作用是把局域网里通过双绞线传输的有线信号(即电信号)经过编译,转换成无线电信号传递给电脑.手 ...
- 码农小汪-设计模式之-Builder模式
建造者模式 将一个复杂的对象的构建与它的表示分离,使得同样构建的过程中可以创建不同的表示.这个话语看起来,好累啊!真心很难理解. 下面是它的UML图: 抽象建造者角色(Builder):为创建一个Pr ...
- 07、人人都会设计模式:建造者模式--Builder
PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/300cbb9ee7f2 本文出自 TigerChain 简书 人人都会设计模式 教程简介 ...
- 人人都会设计模式---建造者模式--Builder
PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/300cbb9ee- 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1.阅读对象 本 ...
- lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧
lombok中的builder注解本质上是为你生成了一个构造器Builder类,通过这个类我们可以构造出带此注解的对象.本质上它实现了设计模式中一种经典的模式:建造者模式 1.认识: ①一句话来说:封 ...
最新文章
- static用法解析---java语言
- 著名加密库收集 Encrypt
- Qt Creator连接MCU
- python有多少种模块_python如何查看有哪些模块
- dj电商-架构与布局
- Mac隐藏技巧:右键点按,在访达中玩出点新花样
- YUV与RGB互转各种公式
- python 读取合并单元格_python 读取合并单元格
- 多款iPhone遭遇中国禁售令!福建法院判决高通胜诉苹果
- JS常用字符串方法复习
- 2021秋招----hr面试总结
- Talk预告 | 普渡大学王虓:如何利用合作对抗学习来提升自监督学习
- Java根据IP地址/掩码位(CIDR)和起始IP-终止IP计算网段(IPV4和IPV6)
- Android 3D 魔方游戏的设计与开发
- js距离米转换为千米_公里和千米的换算(千米和米换算公式)
- mongodb查询文档
- 影石创新在科创板递交招股书注册稿,共有492件专利申请信息
- 干货|6个牛逼的基于Vue.js的后台控制面板,接私活必备
- 计算机应用基础重难点介绍,计算机基础教学计划
- 特别策划|5G最新进展深度解析2022版—国内市场篇(65页附下载)
热门文章
- 使用VideoView做个实用的视频播放器
- 20170207--forlinux-系统初始化
- iOS制作一个雷达图,可用于多种场景(一)
- 纯css3天气动画场景特效
- VS2008中配置 Windows SDK v7
- 1021. Remove Outermost Parentheses删除最外层的括号
- celery无密码连接redis与带密码连接redis
- url(r'^index/$',views.index)的含义解释
- *** line xxxx of `fraud.data': bad value of xxxx for attribute `id_11'
- Non-resolvable parent POM