设计模式-创建者
一、简介
将一个复杂对象的构建过程与它的表示(行为方法)分离,同时可以做到使用同样的创建过程,不同的创建参数或者顺序创建出来的对象的行为不同。创建者模式与工厂模式都是创建对象,但是它们的不同点在于,创建者模式适用于创建复杂的对象,如参数多、创建的逻辑复杂,而工厂模式适合创建简单的对象。
二、类图
三、代码示例
在实际的操作中,创建者模式通常采用内部静态类和链式写法来实现,主查为了能让使用都更强方便简洁地调用。
public class Computer {
private String cpu;
private String mainBoard;
private String randomAccessMemory;
private String hardDisk;
private String graphicsCard;
private String keyBoard;
private String mouse;
private String screen;
private Computer() {
}
;
public static class Builder {
private Computer computer = new Computer();
public Builder cpu(String cpu) {
computer.cpu = cpu;
return this;
}
public Builder mainBoard(String mainBoard) {
computer.mainBoard = mainBoard;
return this;
}
public Builder randomAccessMemory(String randomAccessMemory) {
computer.randomAccessMemory = randomAccessMemory;
return this;
}
public Builder hardDisk(String hardDisk) {
computer.hardDisk = hardDisk;
return this;
}
public Builder graphicsCard(String graphicsCard) {
computer.graphicsCard = graphicsCard;
return this;
}
public Builder keyBoard(String keyBoard) {
computer.keyBoard = keyBoard;
return this;
}
public Builder mouse(String mouse) {
computer.mouse = mouse;
return this;
}
public Builder screen(String screen) {
computer.screen = screen;
return this;
}
public Computer build() {
return computer;
}
}
@Override
public String toString() {
return "cpu:" + cpu + ",mainBoard:" + mainBoard + ",randomAccessMemory:" + randomAccessMemory + ",graphicsCard:" + graphicsCard + ",keyBoard:" + keyBoard + ",mouse:" + mouse;
}
}
真是大冤种啊,现在还徒手写这样的代码!这个模式就是一切为了调用者方便,牺牲小我,方便他人。当然现在不要自己写了,配合lombok的话,一个@Builder注解完事。
四、框架源码示例
这个就比较多了:
1.在访问数据库的框架上,拼接sql,其本上都全封装类似创建者模式的链式方法.比如mybatisplus中的LambdaQueryWrapper。
2.JDK中的经典:StringBuilder用于组织字符串。
3.Spring中也有很多地方使用Builder模式,如BeanDefinitionBuilder,用于获取BeanDefinition对象。
Builder的使用很广泛,随便找一个框架源码,搜索一下带Builder关键的类名,都会有所发现。