跟着实例学习设计模式-生成器模式(builder)

生成器模式是创建型设计模式。

设计意图:将一个复杂的类表示与其构造相分离,使得相同的构建过程能够得出不同的表示。

实例类图:

IVehicleBuilder:抽象建造者,为创建一个Vehicle对象并创建它的相关部件指定的抽象接口,把产品的生产过程分解为不同的步骤,从而使具体的建造者在具体的建造步骤上具有更多弹性,从而创造出不同表示的产品。(这里就是小车和卡车)

CarBuilder、TrunkBuilder:具体建造者,实现IVehicleBuilder接口,构造和装配产品的各个部件定义并明确它所创建的表示,提供一个返回这个产品的接口。

Director:指挥者,构建一个使用IVehicleBuilder接口的对象。

Vehicle:汽车产品,被构建的复杂对象,具体产品建造者,创建该产品的内部表示并定义它的装配过程。

我们先看一下Director都做了什么!

package com.builder;

import com.factory.abstrcatfactory.model.Engine;
import com.factory.abstrcatfactory.model.Tank;
import com.factory.abstrcatfactory.model.Vehicle;

/**构建器的指挥者
 * 构建器模式可以构建相同步骤的两个系列商品
 * 在构建相同步骤的系列商品上,代码量上要优于抽象工厂模式,但是每个产品的不同步骤产品的增加时抽象工厂更有优势,因为功能类隔离性更好。
 * @author gaoxu
 * 实践出真知!
 */
public class Director {
	private IVehicleBuilder _vehicleBuilder = null;

	public Director(IVehicleBuilder vehicleBuilder){
		_vehicleBuilder = vehicleBuilder;
	}

	public Vehicle createVehicle(){
		Engine engine = _vehicleBuilder.builderEngine();
		Tank tank = _vehicleBuilder.builderTank();
		Vehicle vehicle = _vehicleBuilder.builderVehicle(engine,tank);
		return vehicle;
	}
}

我们看到指挥者负责指挥建造产品,再来看一下client的代码,我们就清楚指挥者有多重要了,生成器模式必须有指挥者。

package com.builder;

import com.factory.abstrcatfactory.model.Vehicle;

/**
 * @author gaoxu
 * 实践出真知!
 */
public class Client {
	public static void main(String[] para){
		//小车
		IVehicleBuilder carBuilder = new CarBuilder();
		Director director = new Director(carBuilder);
		Vehicle car = director.createVehicle();
		//卡车
		IVehicleBuilder trunkBuilder = new TrunkBuilder();
		Director directorT = new Director(trunkBuilder);
		Vehicle trunk = directorT.createVehicle();
	}
}

我们再来看具体构建者的代码,我们就清楚了,每个具体构建器都是一个产品的构建整体过程的具体实现。

小车具体构建者,构建发动机、构建油箱,构建小车。这些都封装在具体的构建器中,这样构建与表示就显示的分离,显示在client端没有任何具体构建者内容的影子,完全封装了起来。

package com.builder;

import com.factory.abstrcatfactory.model.Engine;
import com.factory.abstrcatfactory.model.Tank;
import com.factory.abstrcatfactory.model.Vehicle;

/**小车具体实现类
 * @author gaoxu
 * 实践出真知!
 */
public class CarBuilder implements IVehicleBuilder {

	@Override
	public Engine builderEngine() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Tank builderTank() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Vehicle builderVehicle(Engine engine,Tank tank) {
		// TODO Auto-generated method stub
		return null;
	}

}
package com.builder;

import com.factory.abstrcatfactory.model.Engine;
import com.factory.abstrcatfactory.model.Tank;
import com.factory.abstrcatfactory.model.Vehicle;

/**卡车具体实现类
 * @author gaoxu
 * 实践出真知!
 */
public class TrunkBuilder implements IVehicleBuilder {

	@Override
	public Engine builderEngine() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Tank builderTank() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Vehicle builderVehicle(Engine engine,Tank tank) {
		// TODO Auto-generated method stub
		return null;
	}

}

上边的实例也是创建汽车,我们可以看到同样是创建汽车,生成器模式要比抽象工厂模式的代码量少很多很多,当然在解耦方面还是抽象工厂更好一些,因为生成器中的具体构建器中有所有的产品部件的构建过程,如果这个过程更复杂那么具体构建器将非常庞大,修改起来错误率也会很高,而抽象工厂在这方面还是比较好的,每个部件都是独立的构建接口与类。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 03:52:37

跟着实例学习设计模式-生成器模式(builder)的相关文章

跟着实例学习设计模式-原型模式(prototype)

原型模式是创建型模式. 设计意图:用原型实例指定创建对象的类型,并通过拷贝这个原型来创建新的对象. 我们使用构建简历的例子的类图来说明原型模式. 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype.这里我们定义了一个抽象的原型接口,声明了用于clone自己的方法,这里我们已创建简历为具体原型类,Prototype类需要具备以下两个条件: 实现Cloneable接口.在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现

设计模式-生成器模式

前言 点击查看:设计模式系列 生成器模式(建造者模式/builder) 定义:将一个复杂的对象,分成多分,使同样的构建过程,能有不同的表示,这样的设计模式被称为建造者模式. 举例说明: 李嘉诚的遗嘱执行: 财产(产品角色):李嘉诚拥有众多复杂的财产框架,这里以现金与物品入例. 遗嘱(建造者):相当于建造者,分配现金与物品. 具体遗嘱(具体建造者):1.给大儿子的财产分配,2,给小儿子的财产分配. 律师(指导者角色):按照具体的遗嘱指令分配财产. 例子类图: 庞大的财产结构代码: // 财产(复杂

Java设计模式--生成器模式

将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示. Builder Pattern Separate the construction of a complex object from its representation so that the same construction process can create different representations. 类图 模式的结构与使用 生成器模式的结构中包括四个角色. 产品(Product):具体生成器要构造的复

iOS设计模式——生成器模式

选择建造自己的房子的人会把工程外包给承包商.单一承包商不能建造整个房子,他将其分解为几个部分,然后转包给几个实际的建筑商,他们懂得如何将零部件组装起来.房子由由风格.颜色和尺寸各不相同的部件组成.客户告诉承包商房子里都要有什么,然后承包商协调各房屋建筑商,决定需要做什么.应该如何建造,建筑商就如何施工.建房子是个复杂过程,单凭一双手就想建房子,即便可能也非常困难.如果承包商(指导者)与懂得如何建造的建筑商相互协调,这一过程简单得多且更易管理. 有时,构建某些对象有多种不同方式.如果这些逻辑包含在

设计模式—建造者模式(Builder)

title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对象创建型模式.我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来.建造者模式又可以称为生成器模式. 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director

设计模式——生成器模式

这次来看下生成器模式,先来看下类图: 那么来说下特点吧: 将一个复杂对象的创建过程封装起来 允许对象通过多个步骤来创建,并且可以改变过程 实现可以被替换 隐藏了内部实现 来看下代码吧: public abstract class AbstractCarBuilder { public Car car = new Car(); public abstract AbstractCarBuilder builderName(String name); public abstract AbstractC

跟着实例学习设计模式(9)-桥接模式bridge(结构型)

桥接模式属于结构型设计模式. 设计意图:将抽象部分与实现部分分离,使它们都可以独立的变化. 一看到设计意图,大家可能有些发懵,我们看到的继承和接口不都是抽象和实现分离的吗?尤其是接口和抽象类都是这样的实现啊!那怎么还有这么个桥接的分离呢? 我们先来看个例子. 例如:汽车品牌内置导航仪,我们希望实现,每个品牌的导航仪都可以在任何一个牌子的汽车上安装并启动. 汽车品牌有两个:宝马.奔驰. 导航仪有三个牌子:神行者.北斗.高德. 来看正常的设计,我们肯定是会这样的采用继承来实现每个组合的安装和启动处理

[设计模式]<2>. C++与生成器模式(Builder pattern)

原文地址: http://www.cnblogs.com/hebaichuanyeah/p/5585957.html 当构建一个复杂对象时,将构建过程与表示分离.使得同样的过程创建不同的对象. 简单例子,构建produce类,需要构建三个部分part1,part2,part3.通过build类去构建它们,并返回.通过director 类调用build对象进行配置. C++代码 #include <iostream> using namespace std; class Produce { pu

模式02 生成器模式(Builder)

1. 意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2. 结构 此模式的结构如下图所示. 3. 参与者 Builder-- 为创建一个Product对象的各个部件指定抽象接口. ConcreteBuilder-- 实现Builder的接口以构造和装配该产品的各个部件.-- 定义并明确它所创建的表示.-- 提供一个检索产品的接口. Director-- 构造一个使用Builder接口的对象. Product-- 表示被构造的复杂对象.ConcreteBuilde