收藏 分享(赏)

13 设计模式教学课件.ppt

上传人:myk79025 文档编号:5434298 上传时间:2019-03-03 格式:PPT 页数:21 大小:57.50KB
下载 相关 举报
13 设计模式教学课件.ppt_第1页
第1页 / 共21页
13 设计模式教学课件.ppt_第2页
第2页 / 共21页
13 设计模式教学课件.ppt_第3页
第3页 / 共21页
13 设计模式教学课件.ppt_第4页
第4页 / 共21页
13 设计模式教学课件.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、建造者(生成器Builder)模式,仔细阅读体会“建造小人”例子 建造“小人”的过程是稳定的,都需要头身手脚。具体建造的细节不同,有胖瘦高矮等区别。,抽象的建造人的类,abstract class PersonBuilderprotected 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 Bui

2、ldArmLeft();public abstract void BuildArmRight();public abstract void BuildLegLeft();public abstract void BuildLegRight();,class PersonThinBuilder : PersonBuilderpublic PersonThinBuilder(Graphics g, Pen p): base(g, p) public override void BuildHead()g.DrawEllipse(p, 50, 20, 30, 30);public override v

3、oid 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.Dr

4、awLine(p, 70, 100, 85, 150);,建造一个胖的小人(略),class PersonFatBuilder : PersonBuilder。,指挥者角色(控制建造过程,隔离用户与建造过程的关联),class PersonDirector private PersonBuilder pb;public PersonDirector(PersonBuilder pb)this.pb = pb;public void CreatePerson()pb.BuildHead();pb.BuildBody();pb.BuildArmLeft();pb.BuildArmRight();p

5、b.BuildLegLeft();pb.BuildLegRight(); ,客户端,Pen p = new Pen(Color.Yellow);PersonThinBuilder ptb = new PersonThinBuilder(pictureBox1.CreateGraphics(), p);PersonDirector pdThin = new PersonDirector(ptb);pdThin.CreatePerson();PersonFatBuilder pfb = new PersonFatBuilder(pictureBox2.CreateGraphics(), p);Pe

6、rsonDirector pdFat = new PersonDirector(pfb);pdFat.CreatePerson();,建造者(Builder)模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,对象性质的建造,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。,对象性质的建造,有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。

7、这些情况使得性质本身的建造涉及到复杂的商业逻辑。 这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程就是组合零件的过程。由于组合零件的过程很复杂,因此,这些“零件“的组合过程往往被“外部化“到一个称作建造者的对象里,建造者返还给客户端的是一个全部零件都建造完毕的产品对象。,思路,先把构建过程独立出来,在建造者模式中把它称为指导者,由他来指导装配过程,但不负责每步具体的实现。 要有能具体实现每步的对象,称之为建造者或者生成器,Builder模式的结构:,建造者(Builder)角色:定义创建一个Product对象所需的各个部件的操作,具体建造者(Concre

8、te Builder)角色: 实现Builder角色提供的接口,一步一步完成创建产品实例的过程。 在建造过程完成后,提供产品的实例。,指导者(Director)角色:主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象 产品(Product)角色:产品便是建造中的复杂对象。 指导者角色是与客户端打交道的角色。指导者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。,客户端作用,客户端负责创建指导者和具体建造者对象。然后,客户把具体建造者对象交给指导者。客户一声令下,指导者操纵

9、建造者开始创建产品。当产品创建完成后,建造者把产品返还给客户端。,在什么情况下使用建造者模式,需要生成的产品对象有复杂的内部结构。 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。,使用建造者模式主要有以下效果,建造者模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。 每一个Builder都相对独立,而与其它的Builder无关。 模式所建造的最终产品更易于控制。,本质,分离整体构建算法和部件构造,继续工厂方法中的实例,导出数据的应用框架,通常对于具体的到处内容和格式是有要求的: 分成三部分,文件头、文件体、文件尾 文件头:分公司编号、导出数据的日期,对于文本格式,中间用逗号分离 文件体:表名称,然后分条描述数据。 文件尾:输出人,不管是输出文本文件,还是输出XML文件,步骤基本一致 先拼接文件头的内容 然后拼接文件体的内容 在拼接文件尾的内容 最后把拼接好的内容输出去成为文件,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报