大话设计模式之建造者模式
2023-09-14 08:57:15 时间
p span >一.引入
设计模式-9-工厂模式-1-简单/静态工厂模式 工厂模式(Factory Pattern)就是不通过new关键字而使用工厂类来创建对象,能够让创建对象变得简单而且更方便的修改对象。属于创建型模式。它提供了一种创建对象的最佳方式。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
大鸟与小菜吃到的炒面味道不同,而类似肯德基的快餐则不会出现这样情况。其中的原因就是他们的工作流程是非常规范的,时间、温度、热度都确定。这里的工作流程就是一种抽象的流程,此话我们如何去理解呢?
二.解决过程
① 建造小人一
span span /span Graphics gThin = pictureBox1.CreateGraphics(); gThin.DrawEllipse(p, 50, 20, 30, 30); gThin.DrawRectangle(p, 60, 50, 10, 50); gThin.DrawLine(p, 60, 50, 40, 100); gThin.DrawLine(p, 70, 50, 90, 100); gThin.DrawLine(p, 60, 100, 45, 150); gThin.DrawLine(p, 70, 100, 85, 150); /span这样,每次建造一个小人都需要写画头、身体、两手和两脚,很麻烦,也很容易出错。所以,还是需要创建类。
② 建造小人二
创建瘦人类:
span class PersonFatBuilder private Graphics g; private Pen p; public PersonFatBuilder(Graphics g, Pen p) this.g = g; this.p = p; public void Build() g.DrawEllipse(p, 50, 20, 30, 30); g.DrawRectangle(p, 45, 50, 40, 50); g.DrawLine(p, 50, 50, 30, 100); g.DrawLine(p, 80, 50, 100, 100); g.DrawLine(p, 60, 100, 45, 150); g.DrawLine(p, 70, 100, 85, 150); } /span同样可以建造一个胖人类。
这样,确实解决了复用代码建造小人,但是炒面没放盐的问题还是没有解决。在编程的过程中,还是可能丢失小人的某一个部分。所以,就要应用建造者模式。
③ 建造者模式建造小人
定义抽象的建造人的类:
span 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(); } /span瘦人继承抽象类:
span 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);
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(); } /span
这样,指挥者根据用户选择一步步建造小人,并且不会遗忘小人的各个部位。
三.应用模式
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
好处:使得建造代码和表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以。
四.学习心得
其实, 想想生活实际中,处处都是建造者模式。其本质就是产品与构件相分离。每个构件都是产品中必不可少的。所以说,为了避免构件的丢失,就将产品中需要用到的那些构件组合在一起。比如:电脑产品,其中,输入设备、输出设备和主机三个部件不可少,有了它们,就有不同的电脑产品。将书上的定义用生活的角度来看,其实就很容易理解了。
设计模式-9-工厂模式-1-简单/静态工厂模式 工厂模式(Factory Pattern)就是不通过new关键字而使用工厂类来创建对象,能够让创建对象变得简单而且更方便的修改对象。属于创建型模式。它提供了一种创建对象的最佳方式。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
相关文章
- 23种设计模式之装饰者模式
- 创建者模式(创造型设计模式)
- php 抽象工厂模式
- 观察者模式是非常常用的设计模式_实现一个观察者模式
- 电信光猫改桥接模式教程_千兆光猫有必要改桥接模式吗
- Java设计模式之工厂模式
- Java设计模式之适配器模式
- Go学设计模式--怕把核心代码改乱,记得用代理模式
- 设计模式 - 创建型模式_原型模式
- 设计模式 | 结构型 | 门面模式
- 设计模式 | 行为型 | 命令模式
- 深入理解 设计模式之工厂模式
- 漫谈模式之模版方法模式
- 【设计模式】代理模式 ( 动态代理 )
- SpringBoot事件监听机制及观察者/发布订阅模式详解
- Go 语言实现创建型设计模式 - 单例模式
- 设计模式系列整理-01-工厂模式
- 设计模式系列整理-02-建造者模式
- php设计模式(五):生成器模式(Builder)
- 原型模式 prototype 创建型 设计模式(七)详解程序员
- 设计模式之职责链模式(行为型)详解架构师
- Java设计模式之代理模式详解编程语言
- 模板方法模式(模板方法设计模式)详解
- 蚂蚁金服大规模分布式事务实践及四种分布式事务模式
- Linux系统下如何设置阻塞模式(linux设置阻塞模式)
- Oracle数据库收费模式探究(oracle 收费方式)
- Oracle全连接融合现代企业数据智能化新模式(oracle全连接融合)
- 大举出售资产,恒大开启断臂求生模式
- php设计模式ChainOfResponsibility(职责链模式)
- 基于php设计模式中工厂模式详细介绍