建造者模式

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建造者模式
文章转载:http://www.shaoqun.com/a/464192.html