版权声明:程序猴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());
}
}
这就完美的实现了复杂对象的创建!!