天天看点

Java中建造者(Builder)设计Java中建造者(Builder)设计

版权声明:本文为博主原创文章,未经博主允许不得转载。 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