"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。----WIKIPEDIA

个人的理解:

建造者模式可以设置不同的属性或者行为,创建出不一样的对象。比如说生产汽车,假如有三个重要的工序,塑形、拼装、上色。那么可以通过创建者模式来设置,这三道工序中不同的车来说,三道工序可能就是不一样的。通过创建者模式来创建出对象的表现形式也自然就不一样。

借助上面这个例子,画出他的一个类图

主要的代码如下所示

public class Car {

	private String shape;

	private String assemble;

	private String color;}
public abstract class CarBuilder {

	protected Car car = new Car();

	public abstract void setShape(String shape);

	public abstract void setAssemble(String assemble);

	public abstract void setColor(String color);

	public Car getCar(){
		return this.car;
	}
}
public class HongQICarBuilder extends CarBuilder{

	@Override
	public void setShape(String shape) {
		this.car.setShape(shape);
	}

	@Override
	public void setAssemble(String assemble) {
		this.car.setAssemble(assemble);
	}

	@Override
	public void setColor(String color) {
		this.car.setColor(color);
	}

}

这个例子是根据定义以及自己对于创建者模式的理解写的,核心的思想是,通过这样的设计利用不同的实现方法来创建不同的对象出来,这个是其本质。

另外参考其他书籍如设计模式之禅中介绍到可以创建出不同的行为。

假设这样的情景,车子从启动、行驶、停止三个环节,然后我想要的是,我指定那几个环节发生动作哪几个环节就要发生动作。这样的话,创建出来的对象的动作或者说行为是不同的。

主要的代码

public abstract class CarBuilder {

	public abstract void setOrder(List<String> orderList);
	public abstract Car getCar();

}
public abstract class Car {

	private List<String> exeOrderList = new ArrayList<String>();
	public abstract void startUp();
	public abstract void run();
	public abstract void stop();

	public final void templateMethod(){
		for (String exeOrder : exeOrderList) {
			if("startUp".equals(exeOrder)){
				this.startUp();
			}else if("run".equals(exeOrder)){
				this.run();
			}else if("stop".equals(exeOrder)){
				this.stop();
			}
		}
	}

	public final void setOrder(List<String> exeOrderList){
		this.exeOrderList = exeOrderList;
	}

}
public class HongQiCar extends Car{

	@Override
	public void startUp() {
		System.out.println("红旗车启动");
	}

	@Override
	public void run() {
		System.out.println("红旗车行驶中");

	}

	@Override
	public void stop() {
		System.out.println("红旗车停止");

	}

}

创建者实现类

public class HongQiCarBuilder extends CarBuilder{

	private HongQiCar hongQiCar = new HongQiCar();

	@Override
	public void setOrder(List<String> orderList) {
		this.hongQiCar.setOrder(orderList);
	}

	@Override
	public Car getCar() {

		return this.hongQiCar;
	}

}

其中这个产生对象行为不同,需要借助模板方法模式这个模式会在后面博文中进行讲解。

适用的范围

1. 相同的方法,顺序不同产生的产品不一样。

2. 多个属性,拼装时不同拼装出来的产品也不一样。

3. 产品类复杂,或者产品类中的调用顺序不同产生了不同的效能。

比较

与工厂方法模式比较,创建者关注的是零件的类型和装配的顺序,但是工厂方法关注的是创建一个个的对象,可以是零件,但是它不关注组装顺序。

源码下载地址:下载设计模式源代码

时间: 2024-10-04 21:36:19

"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)的相关文章

&quot;围观&quot;设计模式(10)--创建型之原型模式(Prototype Pattern)

原型模式是创建型模式的一种,其特点在于通过"复制"一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的"原型",这个原型是可定制的. 原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效:或者创建值相等,只是命名不一样的同类数据.----WIKIPEDIA 首先看下面这样的一个例子,使用本人自黑一下,实现Clonable接口然后实现它的clone的方法,然后通过该方法对这个对象进行克隆.看是不是像我们

设计模式(创建型)之建造者模式(Builder Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可.它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性. 问题来了... 你可能会有疑惑,建造者模式和抽象工

&quot;围观&quot;设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概

&quot;围观&quot;设计模式(19)--行为型之观察者模式(Observer Pattern)

观察者模式是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实时事件处理系统.----WIKIPEDIA 个人理解 观察者模式,就是使得被观察者中持有观察者的对象实例,在发生某些事件的时候,通过notify"通知"观察者,完成相应的操作,他也叫作发布-订阅模式,定义对象间一对多的依赖关系,使得被观察者对象产生动作,即可通知其依赖的对象该被观察者发生了变更. 案例

&quot;围观&quot;设计模式(18)--行为型之模板方法模式(TemplateMethod Pattern)

模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式.让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤.----WIKIPEDIA 个人理解 模板方法模式相对而言比较简单,一般的都是由抽象类定义好模板方法,然后,子类通过继承并实现其父类中定义好的模板中需要执行的具体的方法,调用子类对象的模板方法时,会执行该类中的具体实现的方法.这个模式我个人的感觉有点像是面向过程的操作,执行完一道工序,接着下一道工序. 案例解析 模板方法相对来说比较简单,这里只列举一个例子供大

设计模式(创建型)之原型模式(Prototype Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! 概述 原型模式是一种创建型设计模式,它通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的.原型模式多用于创建复杂的或者耗时的实例, 因为这种情况下,复制一个已经存在的实例可以使程序运行更高效,或者创建值相等,只是命名不一样的同类数据. 原型模式要求对象实现一个可以"克隆"自身的接口,这样就可以通过

&quot;围观&quot;设计模式(8)--创建型之简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式的核心思想在我认为是将类创建的权利授予给工厂类,其他的类不允许创建,授予了权限的类创建好之后,需要某些的对象的时候,可以去工厂当中去取.也就是像一个工厂一样,用的人不需要关心对象怎么来的,你只需要关心怎么用就好了.工厂模式细分为三种,简单工厂.工厂方法.抽象工厂三种模式.这三种模式比较相似,往往会引发混淆,本文主要结合实际的例子去进行区分.理清三者之间的关系与适用范围. 概述 简单工厂 对于简单工厂,我个人的理解是,直接实现一个方法,要生产什么由这个方法以及传入的参数来决定. 工厂方法

&quot;围观&quot;设计模式(7)--创建型之单例模式(Singleton Pattern)

单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概念比较简单,他的目的就是只允许出现一个该类的实例,经常在JD

设计模式之创建型抽象工厂模式

通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责某一类产品的实例.抽象类是一种声明但不能使用的类,当你使用的时候就会报错.JavaScript中的抽象类不能像传统面向对象语言那样轻松地创建,我们可以在类的方法中手动抛出错误来模拟抽象类.你可能会想,这样的类什么都不能做有什么用?其实它在继承上是很有用的.抽象工厂模式不能用来创建具体对象,一般用它作为父类创建一些子类. // 抽象工厂方法 var PageFactory = function(parent, child) { // 判断抽象