一,定义
建造者模式:也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
二,结构
Builder:为创建一个Product对象的各个部件指定抽象接口
ConcreteBuilder:具体建造者,实现Builder接口,构造和装备各个部件,
Product:具体的产品角色
Director:指挥者,可根据用户需求构建对象,她是构建一个使用Builder接口的对象。
三,示例
public abstract class PersonBuilder {
//画一个人: 头 身体 左手 右手 左腿 右腿
//建造人的过程是一样的,为了避免建造过程的马虎,我们需要先把过程固定
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildArmLeft();
public abstract void buildArmRight();
public abstract void buildLegLeft();
public abstract void buildLegRight();
}
public class ThinPerson extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("画一个人头(瘦)");
}
@Override
public void buildBody() {
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("画一个右腿(瘦)");
}
}
public class PersonDirector {//指挥者
private PersonBuilder builder;
public PersonDirector(PersonBuilder builder){
this.builder = builder;
}
public void creatPerson(){
builder.buildHead();
builder.buildBody();
builder.buildArmLeft();
builder.buildArmRight();
builder.buildLegLeft();
builder.buildLegRight();
}
}
//test main
//建造者模式
public static void builderModel(){
/构建一个瘦子
// ThinPerson person = new ThinPerson();
//构建一个胖子
FatPerson person = new FatPerson();
PersonDirector director = new PersonDirector(person);
director.creatPerson();
}
四,总结
优点:
- 1,使用生成器模式可以使客户端不必知道产品内部组成的细节。
- 2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。
3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
应用场景:
1,主要用于创建一些复杂的对象,这些对象内部构建的构建顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。每一个内部成分本身可以是对象,也可以使一个对象的一个组成部分。
- 2,需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程。
- 3,在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到
参考:《大话设计模式》阿木侠 Java知音