JAVA化境(三)设计模式之建造者设计模式

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/90759886

前言

      本章讲解建造者设计模式的基本内容

方法

1.概念

经过前面两种设计模式的学习我们不难发现,之前的创建型模型仅仅适合创建不是很复杂的对象!那么现实生活中,总会有一些比较复杂的对象。比如电脑这个对象,其Monitor(显示器)、Machine(机箱)、KeyBoard(键盘)就是其组成部分,这些组成部分又有其独立的相关属性,且组成的顺序等都有讲究,这时我们需要用到建造者设计模式解决这一问题。

建造者模式的本质就是将构造(Builder)和装配(Director)分开进行,相互联系创建对象。

2.建造者设计模式实现步骤

1)准备工作

创建工程如下:

其中有四个实体类,分别对应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());
	}

}

这就完美的实现了复杂对象的创建!!

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/90759886