设计模式之建造者模式
作用
建造者模式是设计模式的一种,主要用于构造对象,特别是复杂对象,通常用于与工厂模式配合,使用工厂模式构造简单的部件,然后通过建造者模式将其组装起来,其主要目的是屏蔽构造的过程,使得使用者可以不用知道其实现细节而方便地获取对应的对象。
具体实现
建造者模式主要用于复杂对象的构建,所以就需要一个对应的产品,这里使用台式电脑(显示器、鼠标、键盘、机箱)作为例子,同时还需要一个构造者,用于构造产品的各个部件,以及一个指导者,用于指导部件的拼装,具体如下代码所示:
产品类 (这里为了节省空间,省略了所有的toString方法以及对应的set、get方法)
// 显示器
class Display{
private String type;
Display(String type){
this.type = type;
}
}
// 鼠标
class Mouse{
private String type;
Mouse(String type){
this.type = type;
}
}
// 键盘
class Keyboard{
private String type;
Keyboard(String type){
this.type = type;
}
}
// 机箱
class Box{
private String type;
Box(String type){
this.type = type;
}
}
//计算机--产品类
public class Computer {
private Display display;
private Mouse mouse;
private Keyboard keyboard;
private Box box;
// 省略了所有的set、get方法,读者需要自行加上
// 省略了toString()方法,读者有需要需要自行加上
}
构建者接口及其实现类
public interface Builder {
void buildMouse(String type);
void buildKeyboard(String type);
void buildBox(String type);
void buildDisplay(String type);
Computer buildComputer();
}
/**
* Created by xuhuanfeng on 2017-04-26.
* ComputerBuilder 用于构建一个Computer
*/
public class ComputerBuilder implements Builder {
Computer computer = new Computer();
@Override
public void buildMouse(String type) {
Mouse mouse = new Mouse(type);
computer.setMouse(mouse);
}
@Override
public void buildKeyboard(String type) {
Keyboard keyboard = new Keyboard(type);
computer.setKeyboard(keyboard);
}
@Override
public void buildBox(String type) {
Box box = new Box(type);
computer.setBox(box);
}
@Override
public void buildDisplay(String type) {
Display display = new Display(type);
computer.setDisplay(display);
}
@Override
public Computer buildComputer() {
return computer;
}
}
指导者及其实现类
public interface Director {
Computer buildComputer();
}
public class ComputerDirector implements Director {
private Builder builder;
ComputerDirector(Builder builder){
this.builder = builder;
}
@Override
public Computer buildComputer() {
builder.buildBox("水冷");
builder.buildDisplay("高清屏");
builder.buildKeyboard("红轴机械键盘");
builder.buildMouse("雷蛇");
return builder.buildComputer();
}
}
客户端
public class Client {
public static void main(String[] args) {
Builder builder = new ComputerBuilder();
Director director = new ComputerDirector(builder);
Computer computer = director.buildComputer();
System.out.println(computer);
}
}
这里可以看到客户端的代码非常简洁,只需要一个构建者以及一个指导者,这就是构造者模式的好处,将复杂的构建过程屏蔽起来,从而为使用者提供简洁、方便地操作,使得对象的产生过程极大地与使用分隔开来。
总结
本小节主要学习了构建者模式以及通过具体的例子看到构建者模式的具体过程,体会到了构建者给我们带来的好处,设计模式学习之路还在继续。