BuilderPattern建造者模式
Posted jeff-chang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BuilderPattern建造者模式相关的知识,希望对你有一定的参考价值。
建造者模式
1.定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式通常有4个角色
Person抽象类:定义模板方法及基本方法
public abstract class AbstractPerson {
private boolean canSwim = true;
public void setCanSwim(boolean canSwim) {
this.canSwim = canSwim;
}
protected abstract void walk();
protected abstract void run();
protected abstract void swim();
public final void exercises() {
this.walk();
if (this.canSwim()) {
this.swim();
}
this.run();
}
protected boolean canSwim() {
return canSwim;
}
}
Person实现类:实现基本方法,通常实现模板方法模式,有模板方法及基本方法
public class PersonA extends AbstractPerson {
@Override
protected void walk() {
System.out.println("person a walk");
}
@Override
protected void run() {
System.out.println("person a run");
}
@Override
protected void swim() {
System.out.println("person a swim");
}
}
public class PersonB extends AbstractPerson {
@Override
protected void walk() {
System.out.println("person b walk");
}
@Override
protected void run() {
System.out.println("person b run");
}
@Override
protected void swim() {
System.out.println("person b swim");
}
}
Builder抽象建造者:规范Person行为,设置Person的组建,一般由子类实现
public abstract class AbstractBuilder {
public abstract void setPart();
public abstract AbstractPerson builderPerson();
}
Builder实现类:具体的建造者
public class PersonABuilder extends AbstractBuilder {
private AbstractPerson person = new PersonA();
@Override
public void setPart() {
person.setCanSwim(true);
}
@Override
public AbstractPerson builderPerson() {
return person;
}
}
public class PersonBBuilder extends AbstractBuilder {
private AbstractPerson person = new PersonB();
@Override
public void setPart() {
person.setCanSwim(false);
}
@Override
public AbstractPerson builderPerson() {
return person;
}
}
Director导演类
public class Director {
private AbstractBuilder personABuilder = new PersonABuilder();
private AbstractBuilder personBBuilder = new PersonBBuilder();
public PersonA getPersonA() {
this.personABuilder.setPart();
return (PersonA) this.personABuilder.builderPerson();
}
public PersonB getPersonB() {
this.personBBuilder.setPart();
return (PersonB) this.personBBuilder.builderPerson();
}
}
注意:建造者模式关注的是产品的类型(setPart函数)与产品装配的顺序(exercises函数)
2.应用
2.1 优点
- 封装性:建造者模式,可以不必知道产品(Person)内部的组成细节及实现
- 建造者独立容易扩展
- 方便控制生产的细节:可以对建造过程(builderPerson函数)逐步细化,而不会对其它模块产生影响
2.2 使用场景
- 相同的方法,不同的执行顺序,产生不同的结果
- 同一个对象可以装配不同的部件(setPart函数),产生的运行结果也不相同
- 对象创建过程中依赖系统的其它对象,且这些被依赖的对象不易被得到
以上是关于BuilderPattern建造者模式的主要内容,如果未能解决你的问题,请参考以下文章