建造者

架构师内功心法,注重方法调用顺序的建造者模式详解

两盒软妹~` 提交于 2020-03-01 16:18:11
一、建造者模式的定义 大家平时都去过肯德基用餐,那里不变的是炸鸡、汉堡、薯条、可乐等,这些都是一直都有的,不变的,而其它组合是经常变化的,从而生成不同的“套餐”罢了。而建造模式(Builder Pattern)是将一个复杂的对象的构建过程与它的表示分离,使得同样的构建过程构建不同的表示。使用建造者模式对于用户而言只需要关注指定需要建造的类型就可以获得对象,而不需要了解建造的过程以及细节。 建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不是固定不变的。先看一下建造者模式的类图: 建造者模式中的四个重要角色: 产品(Product):要创建的产品类对象 抽象建造者(Builder):规范产品对象的各个组成部分的建造 建造者(Concrete Builder):具体化对象的各个组成部分的创建 调用者(Director):负责保证对象各部分完整创建或按某种顺序创建 二、建造者模式的应用场景 建造者模式适用于一个具有较多的零件的复杂产品的创建过程,由于需求的变化,组成这个复杂产品的各个零件经常猛烈变化,但是它们的组合方式却相对稳定。 建造者模式适用于以下几种场景: 相同的方法,不同的执行顺序,产生的结果也不同 多个部件或零件,装配到一个对象中,产生的结果不同 产品类复杂,或者产品类中调用顺序不同产生不同的作用 初始化对象特别复杂,参数多,而且很多参数都有默认值 2.1

GOF23设计模式之建造者模式(builder)

£可爱£侵袭症+ 提交于 2020-02-25 12:42:22
一、建造者模式概述   建造者模式的本质:     1.分离了对象子组件的单独构造(由Builder负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的过程复杂的情况下使用。     2.由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。 二、建造者模式   1.创建飞船部件及飞船 1 /** 2 * 飞船 3 * @author CL 4 * 5 */ 6 public class Airship { 7 private Engine engine; //发动机 8 private OrbitalMouble orbitalMouble; //轨道舱 9 private EscapeTower escapeTower; //逃逸塔 10 11 public void launch() { 12 System.out.println("发射!"); 13 } 14 15 public Engine getEngine() { 16 return engine; 17 } 18 public void setEngine(Engine engine) { 19 this.engine = engine; 20 }

(十七)设计模式-建造者模式

橙三吉。 提交于 2020-02-22 23:10:03
1、定义 (Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 2、使用场景 用程序画一个小人,这在游戏程序里非常常见,要求十小人要有头、身体、两手、两脚就可以了。 3、代码结构UML图 PersonDirector:指挥者,是构建一个使用Builder接口的对象; PersonBuilder:Builder是为创建一个Product对象的各个部件知道的抽象接口; PersonThinBuilder:具体建造者,实现Builder接口,构造和装配各个部件; PersonFatBuilder:具体建造者,实现Builder接口,构造和装配各个部件。 4、类的实现 (1)、PersonBuilder(抽象的建造人的类) public class PersonFatBuilder extends PersonBuilder { public PersonFatBuilder ( MyGraphics g ) { super ( g ) ; } @Override public void buildHead ( ) { g . drawLine ( 0 , 2 , 0 , 0 ) ; } @Override public void buildBody ( ) { g . drawLine ( 0 , 0 , 0 , 8 ) ; } @Override

复杂对象的组装与创建——建造者模式(三

两盒软妹~` 提交于 2020-02-12 11:26:46
8.4 关于 Director 的进一步讨论 指挥者类 Director 在建造者模式中扮演非常重要的作用,简单的 Director 类用于指导具体建造者如何构建产品,它按一定次序调用 Builder 的 buildPartX() 方法,控制调用的先后次序,并向客户端返回一个完整的产品对象。下面我们讨论几种 Director 的高级应用方式: 1. 省略 Director 在有些情况下,为了简化系统结构,可以将 Director 和抽象建造者 Builder 进行合并,在 Builder 中提供逐步构建复杂产品对象的 construct() 方法。由于 Builder 类通常为抽象类,因此可以将 construct() 方法定义为静态 (static) 方法。如果将游戏角色设计中的指挥者类 ActorController 省略, ActorBuilder 类的代码修改如下: abstract class ActorBuilder { protected static Actor actor = new Actor(); public abstract void buildType(); public abstract void buildSex(); public abstract void buildFace(); public abstract void

建造者模式

两盒软妹~` 提交于 2020-02-10 09:02:11
/// <summary> /// 建造者模式:的基类。 /// 它要求建造过程必须是稳定的。这是与装饰模式的区别 /// </summary> abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult(); } /// <summary> /// 具体的建造者 /// </summary> class ConcreteBuilder : Builder { private Product p = new Product(); public override void BuilderPartA() { p.Add("part A"); } public override void BuilderPartB() { p.Add("part B"); } public override Product GetResult() { return p; } } /// <summary> /// 具体建造者2,它亦有它自己固定的构造过程 /// </summary> class ConcreteBuilder2 : Builder { private Product product =

建筑大师-建造者模式

允我心安 提交于 2020-02-08 23:03:07
概述 建造者模式(Builder Pattern)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定 类图 建造者模式中有4种角色: 产品类Car。负责定义具体的产品 抽象建造者AbstractCarBuilder。规范产品的组建方式,一般具体的实现由子类完成 具体建造者BenzCarBuilder、BWMCarBuilder。实现抽象建造者,并组装好返回产品 导演类CarDirector。负责安排好已有模块的顺序,然后协调具体的建造者进行组装产品。 代码实现 //产品类 public class Car { //车架 private String frame ; //发动机 private String engine ; //轮胎 private String tyre ; public String getFrame ( ) { return frame ; } public void setFrame ( String frame ) { this . frame = frame ; }

设计模式---建造者模式

限于喜欢 提交于 2020-02-08 09:55:02
建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 比如建造一个房子要分为打地基、砌墙、封顶过程,不同类型的房子都需要经历着三个过程,只是具体实现不同而已。一般方法实现如下。 传统模式 AbstractHouse抽象类封装了建造房子的过程以及过程的执行顺序: public abstract class AbstractHouse { //打地基 public abstract void buildBasic ( ) ; //砌墙 public abstract void buildWalls ( ) ; //封顶 public abstract void roofed ( ) ; public void build ( ) { buildBasic ( ) ; buildWalls ( ) ; roofed ( ) ; } } 建造一个普通房子的类: public class CommonHouse extends AbstractHouse { @Override public void buildBasic ( ) { System . out . println ( " 普通房子打地基 " ) ; }

《JAVA与模式》之建造模式

别来无恙 提交于 2020-02-05 03:51:39
在阎宏博士的《JAVA与模式》一书中开头是这样描述建造(Builder)模式的:   建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 产品的内部表象   一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation)。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎么组成产品。 对象性质的建造   有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发送。   有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。由于建造零件的过程很复杂,因此

4.建造者模式

喜欢而已 提交于 2020-01-29 05:35:32
建造者模式 一、盖房项目需求 1)建房过程:打桩、砌墙、封顶 2)房子有多种样式:普通房、高楼、别墅。各种房子建造过程一样,要求不同 二、传统方式解决盖房需求 1.思路分析图解 2.代码实现 /** * 建房子抽象类 */ public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofed(); public void build() { buildBasic(); buildWalls(); roofed(); } } public class CommonHouse extends AbstractHouse { @Override public void buildBasic() { System.out.println(" 普通房子打地基 "); } @Override public void buildWalls() { System.out.println(" 普通房子砌墙 "); } @Override public void roofed() { System.out.println(" 普通房子封顶 "); } } // 使用

第13章建造者模式

不打扰是莪最后的温柔 提交于 2020-01-28 12:02:30
一 概念 当需要将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用于一个设计模式,建造者模式,又叫生成器模式,建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。如果我们使用了建造者模式,那么用户就只需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二 角色 Builder 是为创建一个Product对象的各个部件制定的抽象接口 ConcreteBuilder 是具体的创建者,实现Builder接口,构造和装配各个部件 Product 具体的产品角色 Director 指挥者,他是构建一个使用Builder接口的对象 三 C++代码实现 //建造者模式 #include "pch.h" #include <iostream> #include <string> #include <vector> using namespace std; //产品类-由多个部件组成 class Product { public: void Add(string part) //添加产品部件 { parts.push_back(part); } void Show() /