概念
建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。属于创建型设计模式。
实用范围
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同表示时。
建造者模式中的角色
- 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口。
- 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
- 指挥者(Director):指挥并构造一个使用Builder接口的对象。
- 产品(Product):表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
建造者模式的实现
就按照上次的车子的例子来看
//Builder:
interface carBuilder{
void buildEngine();
void buildBody();
void buildWheel();
Car buildCar();
}
//ConcreteBuilder:
class BMWBuilder implements carBuilder{
public Car car;
public BMWBuilder(){
car = new Car();
}
public Car buildCar(){
return car;
}
public void buildEngine() {
car.setEngine("创建BMW的引擎");
}
public void buildBody() {
car.setBody("创建BMW的架构");
}
public void buildWheel() {
car.setWheel("创建BMW的车轮");
}
}
//Director
class CarDirector {
public Car constructCar(carBuilder cb) {
cb.buildEngine();
cb.buildBody();
cb.buildWheel();
return cb.buildCar();
}
}
//Product
class Car {
private String engine;
private String body;
private String wheel;
public void setEngine(String engine) {
this.engine = engine;
}
public String getEngine() {
return engine;
}
public void setBody(String body) {
this.body = body;
}
public String getBody() {
return body;
}
public void setWheel(String wheel) {
this.wheel = wheel;
}
public String getWheel() {
return wheel;
}
}
测试
class Test {
public static void main(String[] args) {
CarDirector cd = new CarDirector();
Car womcanPerson = cd.constructCar(new BMWBuilder());
}
}
总结
优缺点
优点
- 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
- 每一个具体建造者都独立,因此可以方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 。
- 可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
缺点
- 当建造者过多时,会产生很多类,难以维护。
- 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,若产品之间的差异性很大,则不适合使用该模式,因此其使用范围受到一定限制。
- 若产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大
建造者模式就是这样。那到最后,我们必须要思考一下为什么这么做?学而不思则罔,我们纵观全部代码,其实我们就会发现,在最后的Test类中,我们其实根本就不会知道具体是怎么造车子的,因为这个过程让director给代劳了。然后,我们的BMWBuilder类中才是真正的造车方法。director其实只是执行了这个过程。这样子,达到了分离模块的功能。所以设计模式的精髓还是那几个原则。感觉原则才是法则,而这么多模式就是具体的招式。今天的建造者模式就到这里。希望看到这里的你可以明白!谢谢!如果有问题,欢迎留言交流