版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/50750542
Java中建造者(Builder)设计
1Builder模式的定义
将一个复杂的对象的构建与他的表示分离,使的同样的构建过程可以构建不同的表示。
2Builder模式的使用场景
(1)相同的方法,不同的执行顺序,产生不同的事件结果。
(2)多个部件都可以装配到一个对象中,但是产生的运行结果又不相同。
(3)产品类非常复杂,或者产品类中调用顺序不同产生不同的作用,这时候使用建造者模式非常是适合。
(4)当初始化一个复杂的对象,如好多参数,且很多参数都具有默认值。
3Builder模式的UML图
Product产品类---产品的抽象
Builder--抽象的Builder,规范产品的组件,一般是由子类实现具体的组件过程。
ConcreateBuilder --具体的Builder类
Director--统一的组件过程。
代码的实现
package builder;
/**
* 抽象deBuilder
* @author lidong
*
*/
public abstract class Builder {
/**
* 设置主机
* @param board
*/
public abstract void buildBorad(String board);
/**
* 设置显示器
* @param display
*/
public abstract void buildDisplay(String display);
/**
* 设置操作系统
*/
public abstract void buildOS();
/**
* 创建机器
* @return
*/
public abstract Computer create();
}
package builder;
/**
* 计算机抽象类
* Product角色
* @author Administrator
*
*/
public abstract class Computer {
protected String mBoard;//主板
protected String mDisplay;//显示器
protected String mOS;//系统
protected Computer() {
}
public String getmBoard() {
return mBoard;
}
public void setmBoard(String mBoard) {
this.mBoard = mBoard;
}
public String getmDisplay() {
return mDisplay;
}
public void setmDisplay(String mDisplay) {
this.mDisplay = mDisplay;
}
//抽象方法
public abstract void setOS();
@Override
public String toString() {
return "Computer [mBoard=" + mBoard + ", mDisplay=" + mDisplay
+ ", mOS=" + mOS + "]";
}
}
package builder;
/**
* 具体的builder类,Window电脑
* @author lidong
*
*/
public class WindowBuilder extends Builder {
private Computer mComputer = new WindowPC();
@Override
public void buildBorad(String board) {
mComputer.setmBoard(board);
}
@Override
public void buildDisplay(String display) {
mComputer.setmDisplay(display);
}
@Override
public void buildOS() {
mComputer.setOS();
}
@Override
public Computer create() {
return mComputer;
}
}
package builder;
/**
* window 电脑
* @author lidong
*
*/
public class WindowPC extends Computer{
protected WindowPC() {
super();
}
@Override
public void setOS() {
mOS = "window 7";
}
}
package builder;
/**
* Director 负责构建Compurter
* @author lidong
*
*/
public class Dirctor {
Builder mBuilder = null;
public Dirctor(Builder mBuilder) {
super();
this.mBuilder = mBuilder;
}
/**
* 构建对象
* @param borad
* @param display
*/
public void construct(String borad,String display) {
mBuilder.buildBorad(borad);
mBuilder.buildDisplay(display);
mBuilder.buildOS();
}
}
测试类:
package builder;
public class Test {
public static void main(String[] args) {
//构造器
Builder builder1 = new WindowBuilder();
Dirctor pcDirctor1 = new Dirctor(builder1);
pcDirctor1.construct("英特尔2", "1G显卡");
System.out.println("Computer info ="+builder1.create().toString());
}
}
代码下载地址:
https://github.com/lidong1665/JAVA_DESIGN_PATTERNS/tree/master/JAVA_DESIGN_PATTERNS