建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
对象性质的建造
有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。
再举一个例子:想象一下像电脑这样一个复杂的产品。每台电脑都有很多部分组成,包括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);
}
}
分享到:
相关推荐
在《设计模式》第二版,刘伟的书中,关于建造者模式的课后习题4,可能涉及到以下几个关键知识点: 1. **建造者接口**:这是建造者模式的核心,定义了构建产品的各种步骤。例如,`IBuilder`接口可能包含`BuildPartA...
【建造者模式】是一种设计模式,它属于创建型模式,主要用在当对象的创建过程复杂,需要通过多个步骤来构建时。这种模式允许我们分步骤构造对象,同时隐藏了对象构建的复杂性,提供了更灵活的方式来组合对象的各个...
建造者模式是一种设计模式,它的核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于当一个对象的构造过程非常复杂,或者构造过程中涉及多种步骤,并且需要创建多种...
在Java设计模式的第9讲中,讲师jzkangta会深入讲解建造者模式的基本概念、工作原理以及实际应用。以下是关于建造者模式的一些关键知识点: 1. **模式定义**:建造者模式将一个复杂对象的构建与其表示分离,使得同样...
建造者模式(Builder Pattern)是Java设计模式中的一种,它属于创建型模式,主要用于构建复杂的对象。这种模式将对象的创建过程与表示分离,使得同样的创建过程可以创建不同的表示。在实际开发中,当我们需要创建的...
01第一讲简单工厂模式 02第二讲工厂方法模式 03第三讲抽象工厂模式 04第四讲工厂模式在开发中的运用 05第五讲单例模式 06第六讲原型模式 07第七讲建造者模式 08第八讲装饰模式 09第九讲策略模式 10第十讲观察者模式 ...
这份资料非常全面且详细,覆盖了 设计模式 基础学习的方方面面,非常适合初学者入门! 资料也按目录进行编排,每一...第 1节:工厂方法模式 第 2 节:抽象工厂模式 第 3 节:建造者模式 第 4 节:原型模式 第5节:单例模式
创建型设计模式如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),它们主要关注对象的创建过程,使得代码更加灵活且易于扩展。 结构型设计...
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 ...
01_第1章_统一建模语言基础知识.ppt 第11章_桥接模式.ppt 第12章_组合模式.ppt 第15章_享元模式.ppt 第18章_命令模式.ppt 第20章_迭代器模式.ppt ...第7章_建造者模式.ppt 第8章_原型模式.ppt 第9章_单例模式.ppt
创建型模式如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式,它们主要关注对象的创建过程,使得系统在面对不同对象实例化需求时更具灵活性。例如,单例模式保证一个类只有一个实例,工厂模式则提供了一种...
第七讲:建造者模式 第八讲:装饰模式 第九讲:策略模式 第十讲:观察者模式 第十一讲:享元模式 第十二讲:代理模式 第十三讲:外观模式 第十四讲:组合模式 第十五讲:桥接模式 第十六讲:适配器模式 第...
6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) 7.1 模式解说 7.2 结构和用法 7.2.1 模式结构 7.2.2 代码模板 7.2.3 Delphi对象构造机制与单例模式 7.3 范例与实践 ...
└── 设计模式 ├── 01_第1章_统一建模语言基础知识.ppt ├── 第10章_适配器模式.ppt ├── 第11章_桥接模式.ppt ├── 第12章_组合模式.ppt ...├── 第7章_建造者模式.ppt ├── 第8章_原型模式.ppt
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. 创建型模式:这类模式涉及到对象的创建,如单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。例如,单例模式确保一个类只有一个实例,并提供全局访问点,而在C#中可以通过`Lazy<T>`类或静态类实现。...
建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite ...
7. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 8. 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新...
三、建造者模式(Builder) 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在C#中,可以使用接口定义建造者,然后由具体的建造者类实现,以构建不同类型的复杂对象。 四、代理...
3.2.4建造者模式实例之游戏人物角色 3.2.5原型模式实例之快速创建工作周报 3.2.6单例模式实例之多文档窗口 3.3实训练习 第4章结构型模式实训 4.1知识讲解 4.1.1结构型模式概述 4.1.2适配器模式 4.1.3桥接...