Java建造者模式能够将一个复杂的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
在建造者模式里,有个指导者,由指导者来管理建造者。用户是与指导者相互联系,指导者联系建造者,最后得到产品。即建造者模式可以强制实行一种分步骤进行的建造过程。
一般在下列场景中使用建造模式:
需要生成的产品有复杂的内部结构
需要生产的产品对象的属性相互依赖
在对象的创建过程中会使用到其他对象
以下场景运用建造者模式
通过汽车加工厂组装汽车,汽车有车头,车身,车尾组成。由这基本汽车元素来建造不同款的汽车。
接下来用建造者模式来进行实现
首先汽车类的代码:
public class Car {
private String head;
private String body;
private String tail;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getTail() {
return tail;
}
public void setTail(String tail) {
this.tail = tail;
}
}
汽车组装抽象类:
public abstract class CarBuilder {
public abstract void makehead();
public abstract void makebody();
public abstract void maketail();
public abstract Car getCar();
}
吉普车组装类:
public class JeepBuilder extends CarBuilder {
Car c = new Car();
@Override
public void makehead() {
// TODO Auto-generated method stub
c.setHead("Jeep---head");
}
@Override
public void makebody() {
// TODO Auto-generated method stub
c.setBody("Jeep---body");
}
@Override
public void maketail() {
// TODO Auto-generated method stub
c.setTail("Jeep---tail");
}
@Override
public Car getCar() {
// TODO Auto-generated method stub
return c;
}
}
汽车组装操作的封装类:
public class CarDirector {
public void makeCar(CarBuilder carBuilder) {
carBuilder.makebody();
carBuilder.makehead();
carBuilder.maketail();
}
}
测试:
public static void main(String[] args) {
/*创建指挥者*/
CarDirector carDirector =new CarDirector();
/*创建汽车建造工厂*/
CarBuilder carBuilder = new JeepBuilder();
/*调用指挥者组装汽车*/
carDirector.makeCar(carBuilder);
/*得到组装好的汽车*/
Car car = carBuilder.getCar();
System.out.println(car.getBody());
System.out.println(car.getHead());
System.out.println(car.getTail());
}