`
lcwyiyun
  • 浏览: 11398 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

第三天 建造者模式

阅读更多
        建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
对象性质的建造
        有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。
再举一个例子:想象一下像电脑这样一个复杂的产品。每台电脑都有很多部分组成,包括CPU,光驱,显卡,内存.......最终的电脑产品需要按一定的顺序,先安装CPU然后内存等等,在组装过程没有结束之前,电脑是无法使用的。由于这一组装过程可能很复杂,而且可能会经常变动。那么就有必要将这易变的过程抽象出一个外部电脑组装者来负责产品的组装过程。另外,客户对于电脑产品肯定会有一些偏好,比如某些人喜欢DELL电脑,有些人喜欢IBM电脑,这些电脑生产者的组装产品的方式几乎雷同,也就是说针对客户的不同需要,电脑组装者的构造过程可以适合于不同的生产者。
        对于这样的有多个零件组成的复杂产品的组装过程,就可以使用Builder建造者模式来完成。
        有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程就是组合零件的过程。由于组合零件的过程很复杂,因此,这些"零件"的组合过程往往被"外部化"到一个称作建造者的对象里,建造者返还给客户端的是一个全部零件都建造完毕的产品对象。

Builder模式的结构
       建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。
        具体建造者(Concrete Builder)角色:担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:
•实现Builder角色提供的接口,一步一步完成创建产品实例的过程。
•在建造过程完成后,提供产品的实例。
        指导者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。
        产品(Product)角色:产品便是建造中的复杂对象。
        指导者角色是于客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。

Product角色
public class Animal {
	private String head;
	private String body;
	private String leg;

	public String getHead() {
		return head;
	}

	public void setHead(String head) {
		this.head = head;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getLeg() {
		return leg;
	}

	public void setLeg(String leg) {
		this.leg = leg;
	}
}

Builder角色
public interface AnimalBuilder {

	void buildHead();

	void buildBody();

	void buildLeg();
	
	Animal buildAnimal();
}


Concrete Builder角色
public class CatBuilder implements AnimalBuilder{

	private Animal cat = null;
	public CatBuilder() {
		cat = new Animal();
	}
	
	public void buildBody() {
		cat.setHead("猫的头");
		System.out.println("构造猫的头");
	}

	public void buildHead() {
		cat.setBody("猫的身体");
		System.out.println("构造猫的身体");
	}

	public void buildLeg() {
		cat.setLeg("猫的腿");
		System.out.println("构造猫的腿");
	}

	public Animal buildAnimal() {
		System.out.println("构造了一只猫");
		return cat;
	}
}

public class DogBuilder implements AnimalBuilder{

	private Animal dog = null;
	public DogBuilder() {
		dog = new Animal();
	}
	
	public void buildBody() {
		dog.setHead("狗的头");
		System.out.println("构造狗的头");
	}

	public void buildHead() {
		dog.setBody("狗的身体");
		System.out.println("构造狗的身体");
	}

	public void buildLeg() {
		dog.setLeg("狗的腿");
		System.out.println("构造狗的腿");
	}

	public Animal buildAnimal() {
		System.out.println("构造一只狗");
		return dog;
	}
}


Director角色
public class Director {

	// 顺序1
	public Animal constructAnimal1(AnimalBuilder animalBuilder) {
		animalBuilder.buildHead();
		animalBuilder.buildBody();
		animalBuilder.buildLeg();
		return animalBuilder.buildAnimal();
	}
	
	// 顺序2
	public Animal constructAnimal2(AnimalBuilder animalBuilder) {
		animalBuilder.buildBody();
		animalBuilder.buildHead();
		animalBuilder.buildLeg();
		return animalBuilder.buildAnimal();
	}
}

测试代码
public class Test {

	public static void main(String[] args) {
		AnimalBuilder catBuilder = new CatBuilder();
		Animal cat1 = new Director().constructAnimal1(catBuilder);
		Animal cat2 = new Director().constructAnimal2(catBuilder);
		
		AnimalBuilder dogBuilder = new DogBuilder();
		Animal dog1 = new Director().constructAnimal1(dogBuilder);
		Animal dog2 = new Director().constructAnimal2(dogBuilder);
	}
}
分享到:
评论

相关推荐

    第2.3章 建造者模式1

    第2章 建造者模式提出问题问题描述:要求根据原始数据创建文本和HTML两种风格的列表。假设列表只到二级,原始数据格式为 标题1:子标题1,子标题2;标题2,子标

    设计模式PPT.rar

    01第一讲简单工厂模式 02第二讲工厂方法模式 03第三讲抽象工厂模式 04第四讲工厂模式在开发中的运用 05第五讲单例模式 06第六讲原型模式 07第七讲建造者模式 08第八讲装饰模式 09第九讲策略模式 10第十讲观察者模式 ...

    java设计模式

    11.4 建造者模式的扩展 11.5 最佳实践 第12章 代理模式 12.1 我是游戏至尊 12.2 代理模式的定义 12.3 代理模式的应用 12.3.1 代理模式的优点 12.3.2 代理模式的应用 12.4 代理模式的扩展 12.4.1 普通代理 12.4.2 ...

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    第十三节 建造者模式 第十四节 适配器模式 第十五节 桥接模式 第十六节 装饰器模式 第十七节 迭代器模式 第十八节 中介者模式 第十九节 备忘录模式 第二十节 状态模式 第二十一节 访问者模式 第二十二节 原型模式 第...

    Head First 设计模式 JAVA源码

    第七讲:建造者模式 第八讲:装饰模式 第九讲:策略模式 第十讲:观察者模式 第十一讲:享元模式 第十二讲:代理模式 第十三讲:外观模式 第十四讲:组合模式 第十五讲:桥接模式 第十六讲:适配器模式 第...

    Delphi模式编程第一分卷

    6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) 7.1 模式解说 7.2 结构和用法 7.2.1 模式结构 7.2.2 代码模板 7.2.3 Delphi对象构造机制与单例模式 7.3 范例与实践 ...

    设计模式课程每章ppt(共27章).zip

    └── 设计模式 ├── 01_第1章_统一建模语言基础知识.ppt ├── 第10章_适配器模式.ppt ├── 第11章_桥接模式.ppt ├── 第12章_组合模式.ppt ...├── 第7章_建造者模式.ppt ├── 第8章_原型模式.ppt

    Delphi模式编程第二分卷

    6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) 7.1 模式解说 7.2 结构和用法 7.2.1 模式结构 7.2.2 代码模板 7.2.3 Delphi对象构造机制与单例模式 7.3 范例与...

    刘伟1..25章设计模式大集合

    01_第1章_统一建模语言基础知识.ppt 第11章_桥接模式.ppt 第12章_组合模式.ppt 第15章_享元模式.ppt 第18章_命令模式.ppt 第20章_迭代器模式.ppt ...第7章_建造者模式.ppt 第8章_原型模式.ppt 第9章_单例模式.ppt

    《设计模式实训教程》【PPT+类图与代码+样章】

    3.2.4建造者模式实例之游戏人物角色 3.2.5原型模式实例之快速创建工作周报 3.2.6单例模式实例之多文档窗口 3.3实训练习 第4章结构型模式实训 4.1知识讲解 4.1.1结构型模式概述 4.1.2适配器模式 4.1.3桥接...

    07-使用代理快速接入第三方库(1).html

    建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) 外观模式( Facade ) 桥接模式( Bridge ) 组合模式( Composite...

    精通python设计模式与源码

    首部分介绍处理对象创建的设计模式,包括工厂模式、建造者模式、原型模式;第二部分介绍处理一个系统中不同实体(类、对象等)之间关系的设计模式,包括外观模式、享元模式等;第三部分介绍处理系统实体之间通信的...

    《Java设计模式(第2版)》

    1、创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 2、结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 3、行为型模式...

    设计模式-基于python1

    第一章第一章 创建型模式创建型模式1.1 工厂模式(工厂方法、抽象工厂、单例模式及三者的区别)(重点)1.2 建造者模式1.3 原型模式第二章第二章 结构型模式

    24个设计模式与6大设计原则

    第 10 章 建造者模式【BUILDER PATTERN】 82 第 11 章 桥梁模式【BRIDGE PATTERN】 97 第 12 章 命令模式【COMMAND PATTERN】 112 第 13 章 装饰模式【DECORATOR PATTERN】 126 第 14 章 迭代...

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

    设计模式 GOF 23

    第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 ...

    精通python设计模式

    第一部分介绍处理对象创建的设计模式,包括工厂模式、建造者模式、原型模式;第二部分介绍处理一个系统中不同实体(类、对象等)之间关系的设计模式,包括外观模式、享元模式等;第三部分介绍处理系统实体之间通信的...

    java中级进阶高级23种设计模式详细介绍+代码详解PPT模板.pptx

    工厂模式 java中级进阶高级23种设计模式详细介绍+代码详解PPT模板全文共26页,当前为第3页。 抽象工厂模式 java中级进阶高级23种设计模式详细介绍+代码详解PPT模板全文共26页,当前为第4页。 建造模式 java中级进阶...

    JAVA与模式

    单例模式与MX记录 com.javapatterns.multilingual 专题:多例模式与多语言支持 com.javapatterns.keygen 专题:序列键生成器与单例及多例模式 com.javapatterns.builder 建造者模式 ...

Global site tag (gtag.js) - Google Analytics