《大话设计模式》读书笔记-建造者模式

// 建造者类
    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();
        }
    }

abstract class PersonBuilder
    {
        // 建造人的抽象类
        protected Graphics g;
        protected 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();
    }
// 瘦人类
    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);
        }
    }
Pen p = new Pen(Color.Black);
PersonThinBuilder ptb = new PersonThinBuilder(pictureBox1.CreateGraphics(), p);
PersonDirector pdThin = new PersonDirector(ptb);
pdThin.CreatePerson();
建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。

转载于:https://www.cnblogs.com/liming1019/archive/2010/01/08/1642681.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1170. 比较字符串最小字母出现频次

1. 题目 我们来定义一个函数 f(s),其中传入参数 s 是一个非空字符串; 该函数的功能是统计 s 中(按字典序比较)最小字母的出现频次。 例如,若 s “dcce”,那么 f(s) 2,因为最小的字母是 “c”…

讯达机器人_科大讯飞新品频发完善场景布局“双11”斩获三大平台25项冠军

11月12日,科大讯飞发布”双11”战报,C端产品兑现AI红利实现可持续增长,一举斩获京东、天猫、苏宁易购三大平台25项冠军。11月1日至11月11日,销售额同比增长56% 。目前,科大讯飞消费者业务连续三年保持营收超过30%的增速…

【Eclipse 插件】Implementors

当追踪方法代码时,Eclipse默认是转到方法的接口类,而接口中是只有方法名称没有具体的实现代码,此插件提供了追踪到具体实现类的实现代码的功能。官方地址 转载于:https://www.cnblogs.com/derod/archive/2010/01/14/1647509.html

常见报错原因

因为经常犯这个错,但是还不记住! 以此来告诫自己! 1. KeyError 表示当前Key就没有!!! 去检查一下,你出错的字典或者是列表(一般出这个错误肯定有个对照! )…

jQuery验证validate插件

灰常好用 jquery.validate.js 当然还是用插件.... 别忘记引用JQuery 自带类库 ------------------------------------------- 使用前介绍下label属性 当用label标签把一段文本和一个控件绑定之后,用户点击文本,相关的控件就会获得焦点。 隐式绑定不需使用…

安装ssd后不识别网卡_100元体验纯正万兆网络:需要安装SSD的NAS服务器

万兆网络似乎离普通玩家一直很遥远,不过借着万能的闲鱼,小编100块搞到一张非常便宜的二手电口万兆网卡,配合安装固态硬盘的NAS网络存储服务器,万兆网络走起来~这张卡用的是BCM57710芯片,网上都说只能在Win 7或者同时期…

【KPGNN】运行错误与成功后的合集

出错合集 1. AssertionError 这句话的意思是: DGLGraph.readonly已经不可用了,而现在高版本的DGLGraph总是支持mutable! 记住是总是,一直!!! 所以现在由于版本问题,使用了高版本&a…

react获取id_解决React应用界面开发常见痛点(一)业务逻辑与UI分离

前言:本系列是针对于React在界面开发痛点的一些解决方案,只是React应用中偏向展示的一环构建一个业务与UI分离的react应用本篇是基于HOC方案并未使用Hooks业务逻辑与UI在编写一个react组件前,我们一定要弄清两件事。什么是UI?什么…

(二十六)【2021 WWW】Knowledge-Preserving Incremental Social Event Detection via Heterogeneous GNNs

题目: Knowledge-Preserving Incremental Social Event Detection via Heterogeneous GNNs 中文题目: 基于异构gnn的知识保持增量社会事件检测 学习目标 学习怎么知识增强的? 学习怎么处理时间等多个因素的? 学习怎么构建子图…

LeetCode 931. 下降路径最小和(动态规划)

1. 题目 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和。 下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列。 示例: 输入:[[1,2,3],[4,5,6…

IL应用之——用IL分析接口的本质

IL反编译利器——Ildasm.exe和Reflector.exe:一:Ildasm.exe简介 这一微软VS自带工具,在上一篇博文《初识Ildasm.exe——IL反编译的实用工具》中已经做了详细介绍,这里不再鳌述;二:Reflector.exe简介 至此(1…

自定义_如何自定义协议

前言何为自定义协议,其实是相对标准协议来说的,这里主要针对的是应用层协议;常见的标准的应用层协议如http、ftp、smtp等,如果我们在网络通信的过程中不去使用这些标准协议,那就需要自定义协议,比如我们常用…

vs 2008 Ide 设置

/Files/chenhs/CurrentSettings-2009-08-02.rar/Files/chenhs/vs2005_vs2008_scottgu_vssetings.rar 转载于:https://www.cnblogs.com/chenhs/archive/2010/02/05/1664095.html

(二十七)【2021 WWW】Learning Intents behind Interactions with Knowledge Graph for Recommendation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OpZWgm7T-1634540652258)(C:\Users\小轩\AppData\Roaming\Typora\typora-user-images\image-20211018091530075.png)] 创新性 提出了新的GNN聚合方案提出了意图图,每个意图图是将每个inte…

LeetCode 949. 给定数字能组成的最大时间(暴力)

1. 题目 给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。 最小的 24 小时制时间是 00:00,而最大的是 23:59。 从 00:00 (午夜)开始算起,过得越久,时间越大。 以长度为 5 的字符…

校验json格式_格式化展示,校验错误,编辑JSON,这几个JSON工具一定不能错过

今天给大家介绍几个常用JSON的工具,基本上能满足你工作中对JSON的所有需求google插件 JSONView安装好插件后,格式化接口返回的JSON,还能展开节点和关闭节点,超级方便格式化本地JSON,检验错误JSON Viewer网页版将杂乱的…

LeetCode 929. 独特的电子邮件地址

1. 题目 每封电子邮件都由一个本地名称和一个域名组成,以 符号分隔。 例如,在 aliceleetcode.com中, alice 是本地名称,而 leetcode.com 是域名。 除了小写字母,这些电子邮件还可能包含 ‘.’ 或 ‘’。 如果在电…

推荐系统常用评价指标和代码实现

评价指标 Recall 名称: 召回率(真阳性率) 意义:在推荐系统中,我们只关心正确推荐的有多少,也就是用户真实喜欢的,并不会关心推荐错的,所以我们用召回率,而不是准确率&a…

哥谈的是语言,不是寂寞

经常看到一些文章在谈论语言,例如“哪个语言更有前途”,“语言选择是否关键”。我是个语言粉丝,但是看到这些文章总有一些奇怪的感觉。因为在我看来,这些文章谈的东西都不是我眼中的语言——可能与国内技术环境有关,语…

python timeit用法_十大Python开发技巧

Python开发指南, 超级实用足以让您震撼> Photo by Christina Morillo from StockSnap时不时地,当我了解Python的新功能时,或者我发现其他一些人不知道该功能时,我会记下它。在过去的几周中,我最近了解或实现了一些有趣的功能-S…