天天看點

JAVA設計模式(三)設計模式之建造者設計模式前言方法

前言

      本章講解建造者設計模式的基本内容

方法

1.概念

經過前面兩種設計模式的學習我們不難發現,之前的建立型模型僅僅适合建立不是很複雜的對象!那麼現實生活中,總會有一些比較複雜的對象。比如電腦這個對象,其Monitor(顯示器)、Machine(機箱)、KeyBoard(鍵盤)就是其組成部分,這些組成部分又有其獨立的相關屬性,且組成的順序等都有講究,這時我們需要用到建造者設計模式解決這一問題。

建造者模式的本質就是将構造(Builder)和裝配(Director)分開進行,互相聯系建立對象。

2.建造者設計模式實作步驟

1)準備工作

建立工程如下:

JAVA設計模式(三)設計模式之建造者設計模式前言方法

其中有四個實體類,分别對應Computer(電腦)Monitor(顯示器)、Machine(機箱)、KeyBoard(鍵盤)

Computer代碼如下:

package creator;

public class Computer {

	private Monitor monitor; //顯示器
	private Machine machine; //主機
	private KeyBoard keyBoard; //鍵盤
	
	public Monitor getMonitor() {
		return monitor;
	}
	public void setMonitor(Monitor monitor) {
		this.monitor = monitor;
	}
	public Machine getMachine() {
		return machine;
	}
	public void setMachine(Machine machine) {
		this.machine = machine;
	}
	public KeyBoard getKeyBoard() {
		return keyBoard;
	}
	public void setKeyBoard(KeyBoard keyBoard) {
		this.keyBoard = keyBoard;
	}
}
           

其中的顯示器代碼如下,剩下的三個類代碼諸如此類:

package creator;

public class Monitor {
	private String name;
	
	public Monitor(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
  
}
           

2)設計構造器

與之前不同的是,這個構造器允許擁有多個建構不同元件的方法。單獨建構元件的方法又可以結合工廠設計模式進行使用。

我們設定電腦的建構者接口如下:

package creator;

public interface ComputerBuilder {
     public Monitor builderMonitor();//建立顯示器
     public Machine builderMachine();//建立主機
     public KeyBoard builderKeyBoard();//建立鍵盤
}
           

接下來設計一種電腦的建構實作類,比如說惠普(HP)

package creator;

public class HPComputerBuilder implements ComputerBuilder {

	@Override
	public Monitor builderMonitor() {
		System.out.println("我是惠普顯示器");
		return new Monitor("惠普"); //注意:此處可以結合工廠設計模式使用
	}

	@Override
	public Machine builderMachine() {
		System.out.println("我是惠普主機");
		return new Machine("惠普");
	}

	@Override
	public KeyBoard builderKeyBoard() {
		System.out.println("我是惠普鍵盤");
		return new KeyBoard("惠普");
	}

}
           

3)設定建造器

我們設定建構者的接口:

package creator;

public interface ComputerDirector {
	public Computer createComputer();//組裝電腦
}
           

接下來我們設計其實作類來組裝我們的惠普電腦:

package creator;

public class HPComputerDirector implements ComputerDirector {

	private ComputerBuilder builder;

	public HPComputerDirector(ComputerBuilder builder) {
		this.builder = builder;
	}

	@Override
	public Computer createComputer() {
		Monitor monitor = builder.builderMonitor();
		Machine machine = builder.builderMachine();
		KeyBoard keyBoard = builder.builderKeyBoard();
		
		//組裝電腦,可考慮組建順序
		Computer computer = new Computer();
		computer.setMonitor(monitor);
		computer.setMachine(machine);
		computer.setKeyBoard(keyBoard);
		
		return computer;
	}

}
           

4)編寫測試類進行測試

package creator;

public class Test {

	public static void main(String[] args) {
		ComputerDirector director = new HPComputerDirector(new HPComputerBuilder());
		
		Computer computer = director.createComputer();
		
		System.out.println(computer.getMonitor().getName());
	}

}
           

這就完美的實作了複雜對象的建立!!

繼續閱讀