Builder 模式 —— 建造者模式(又译成生成器模式)的主要功能是构建复杂的产品,它是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
举个例子,打个生产电脑的比方,这里简单一点,假设生产电脑只需要 CUP、内存和显卡,现在需要生产宏基和戴尔两个品牌的电脑,不用设计模式的实现:
Acer.java
import java.util.ArrayList;
import java.util.List;
/**
* -----------------------------------------
* @描述 生产宏基笔记本电脑
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-4 <p>
* -----------------------------------------
*/
public class Acer{
protected List<String> parts = new ArrayList<String>();
//生产CPU
public void createCPU() {
parts.add("CUP: Intel 酷睿i3 2350M");
}
//生产内存
public void createMemory() {
parts.add("内存: 4GB DDR3 1333MHz");
}
//生产显卡
public void createDisplayCard() {
parts.add("显卡: NVIDIA GeForce GT 520M");
}
//显示产品信息
public void show(){
System.out.print("产品部件信息:");
for(String part : parts){
System.out.print(part + "\t");
}
}
}
Dell.java
import java.util.ArrayList;
import java.util.List;
/**
* -----------------------------------------
* @描述 生产戴尔笔记本电脑
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-4 <p>
* -----------------------------------------
*/
public class Dell{
protected List<String> parts = new ArrayList<String>();
//生产CPU
public void createCPU() {
parts.add("CUP: Intel 酷睿i7 3612QM");
}
//生产内存
public void createMemory() {
parts.add("内存: 8GB DDR3 1600MHz");
}
//生产显卡
public void createDisplayCard() {
parts.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000");
}
//显示产品信息
public void show(){
System.out.print("产品部件信息:");
for(String part : parts){
System.out.print(part + "\t");
}
}
}
Client.java
/**
* -----------------------------------------
* @描述 客户端测试
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-4 <p>
* -----------------------------------------
*/
public class Client {
private static Acer acer = new Acer();
private static Dell dell = new Dell();
public static void main(String[] args){
/**
* 宏基
*/
acer.createCPU();
acer.createMemory();
acer.createDisplayCard();
acer.show();
/***************************************/
System.out.println();
/***************************************/
/**
* 戴尔
*/
dell.createCPU();
dell.createMemory();
dell.createDisplayCard();
dell.show();
}
}
仔细观察一下上面的实现,不难发现,不管是生产何种品牌的笔记本,在实现的时候,它们的步骤基本上都是一样的,都是生产电脑相应的部件并添加都电脑里面,在生产不同品牌电脑
的时候,都会重复处理这几个步骤,但是明显的是,这几个步骤都是稳定的或者说是一样的,只是每个步骤的具体实现不一样或者说是变化的,如果将这些变化的部分抽取出来,也就是
说如果将处理过程与具体的步骤的实现分离开来的话,这样就能够复用这些处理过程,而且这样一来就能很容易的做到在不同品牌电脑之间切换生产。
使用 Builder 模式的实现,如图:
Product.java
package pattern.builder;
import java.util.ArrayList;
import java.util.List;
/**
* -----------------------------------------
* @描述 抽象产品
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public abstract class Product {
protected List<String> parts = new ArrayList<String>();
//添加部件
public void add(String part){
parts.add(part);
}
//显示产品信息
public void show(){
System.out.print("产品部件信息:");
for(String part : parts){
System.out.print(part + "\t");
}
}
}
Acer.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 宏基笔记本
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Acer extends Product{
//Do other things here
}
Dell.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 戴尔笔记本
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Dell extends Product{
//Do other things here
}
Builder.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 抽象建造者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public interface Builder {
//CUP
public void buildCPU();
//内存
public void buildMemory();
//显卡
public void buildDisplayCard ();
//最终产品
public Product getFinalResult();
}
AcerBuilder.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 宏基笔记本建造者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class AcerBuilder implements Builder {
private Product product = new Acer();
@Override
public void buildCPU() {
product.add("CUP: Intel 酷睿i3 2350M");
}
@Override
public void buildMemory() {
product.add("内存: 4GB DDR3 1333MHz");
}
@Override
public void buildDisplayCard() {
product.add("显卡: NVIDIA GeForce GT 520M");
}
@Override
public Product getFinalResult() {
return product;
}
}
DellBuilder.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 戴尔笔记本建造者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class DellBuilder implements Builder {
private Product product = new Dell();
@Override
public void buildCPU() {
product.add("CUP: Intel 酷睿i7 3612QM");
}
@Override
public void buildMemory() {
product.add("内存: 8GB DDR3 1600MHz");
}
@Override
public void buildDisplayCard() {
product.add("显卡: NVIDIA GeForce GT 640M+Intel GMA HD 4000");
}
@Override
public Product getFinalResult() {
return product;
}
}
Director.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 产品构建指导者
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public void construct(){
builder.buildCPU();
builder.buildMemory();
builder.buildDisplayCard();
}
}
Client.java
package pattern.builder;
/**
* -----------------------------------------
* @描述 客户端测试
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-5 <p>
* -----------------------------------------
*/
public class Client {
private static Builder acerBuilder = new AcerBuilder(),
dellBuilder = new DellBuilder();
public static void main(String[] args){
System.out.print("宏基");
Director director = new Director(acerBuilder);
director.construct();
Product product = acerBuilder.getFinalResult();
product.show();
/***************************************/
System.out.println();
/***************************************/
System.out.print("戴尔");
director = new Director(dellBuilder);
director.construct();
product = dellBuilder.getFinalResult();
product.show();
}
}
相关推荐
java设计模式------------------------------------建造者模式
Java设计模式-建造者模式详解
JAVA-设计模式-创建型模式-建造者模式
Java 设计模式-建造者模式(Builder)结合Android小知识讲解,简单明了
java常用设计模式-建造者模式
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
这个http://blog.csdn.net/dawanganban/article/details/9990405博客中java设计模式的源代码。下载前请先看《设计模式——建造者模式》一文。
设计模式之建造者模式代码示例,
讲故事,学(Java)设计模式—建造者模式Java开发Java经验技巧共5页.pdf.zip
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
1.1.3 建造者模式 10 1.1.4 单态模式 13 1.1.5 原型模式 15 1.2 结构型模式 17 1.2.1 适配器模式 17 1.2.2 桥接模式 19 1.2.3 组合模式 23 1.2.4 装饰模式 26 1.2.5 外观模式 29 1.2.6 享元模式 32 1.2.7 代理模式 ...
7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring...
java 设计模式 建造者模式,希望对大家理解设计模式有帮助
本系统使用Java代码实现,是设计模式的期末课程设计,共使用了5种设计模式,分别是**原型模式、单例模式、抽象工厂模式、代理模式、建造者模式。*,希望对各位有帮助
用myeclipse开发的java设计模式课程设计,课题内容为西瓜工厂,包含四个设计模式,单例模式、代理模式、建造者模式和抽象工厂模式,有较好的图形界面,文档内附有完整代码,适用于新手学习。
1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:模板方法模式、命令模式、...
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 ...
Java创建型设计模式之建造者模式详解.rar