什么时候需要用到建造者模式?
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用建造者模式好处就是使得建造代码与表示代码分离,由于建造者隐藏该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要在创建一个具体的创建者就可以了。
建造者模式主要有几部分组成:
例如: 建造人
1.抽象建造类 Builder
2.具体建造者 ThinPersonBuilder(继承Builder,构造装配各个部件)
3.指挥者 (根据需求 具体的指挥创建)
4.Product (最终创建出来的产品)
代码如下:
1:抽象建造类 Builder
/**
* @author: wjq
* @date: 2018/3/19
* @description: 抽象建造类 Builder
*/
public abstract class PersonBuilder {
public abstract void buildHead();
public abstract void buildHBody();
public abstract void buildArmLeft();
public abstract void buildArmRight();
public abstract void buildLegLeft();
public abstract void buildLegRight();
public abstract void builder();
}
2.具体建造者 ThinPersonBuilder(继承Builder,构造装配各个部件)
/**
* @author: wjq
* @date: 2018/3/19
* @description: 具体的一个建造者 ThinPersonBuilder (继承Builder,构造装配各个部件)
*/
public class PersonThinBuilder extends PersonBuilder{
@Override
public void buildHead() {
System.out.println("建造 头");
}
@Override
public void buildHBody() {
System.out.println("建造 身体");
}
@Override
public void buildArmLeft() {
System.out.println("建造 左胳膊");
}
@Override
public void buildArmRight() {
System.out.println("建造 右胳膊");
}
@Override
public void buildLegLeft() {
System.out.println("建造 左腿");
}
@Override
public void buildLegRight() {
System.out.println("建造 右腿");
}
@Override
public void builder() {
this.buildArmLeft();
this.buildArmRight();
this.buildHBody();
this.buildHead();
this.buildLegLeft();
this.buildLegRight();
}
}
3.指挥者 (根据需求 具体的指挥创建)
/**
* @author: wjq
* @date: 2018/3/19
* @description: 指挥者 (根据需求 具体的指挥创建)
*/
public class Director {
private PersonBuilder personBuilder;
public void construct(PersonBuilder personBuilder){
personBuilder.builder();
// this.personBuilder = personBuilder;
}
public PersonBuilder getResult(){
return personBuilder;
}
}
4.Product (最终创建出来的产品)
/**
* @author: wjq
* @date: 2018/3/19
* @description: Product (最终创建出来的产品)
*/
public class Product {
public static void main(String[] args) {
Director director = new Director();
PersonThinBuilder PersonThinBuilder = new PersonThinBuilder();
director.construct(PersonThinBuilder);
// director.getResult();
}
}
具体根据业务需求写 !!!