美文网首页
BuilderPattern建造者模式

BuilderPattern建造者模式

作者: jeff_chang_liu | 来源:发表于2020-08-10 23:08 被阅读0次

建造者模式

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();
    }
}

<font color="#FF0000">注意:</font>建造者模式关注的是产品的类型(setPart函数)与产品装配的顺序(exercises函数)

2.应用

2.1 优点

  • 封装性:建造者模式,可以不必知道产品(Person)内部的组成细节及实现
  • 建造者独立容易扩展
  • 方便控制生产的细节:可以对建造过程(builderPerson函数)逐步细化,而不会对其它模块产生影响

2.2 使用场景

  • 相同的方法,不同的执行顺序,产生不同的结果
  • 同一个对象可以装配不同的部件(setPart函数),产生的运行结果也不相同
  • 对象创建过程中依赖系统的其它对象,且这些被依赖的对象不易被得到

相关文章

  • BuilderPattern建造者模式

    建造者模式 1.定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式通常有...

  • 17.建造者模式

    基本介绍 1)建造者模式(BuilderPattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造...

  • Javaの设计模式之建造者模式

    推荐阅读:《设计模式之禅》 今早早起,刚刚出炉,哈哈 BuilderPattern 设计模式之建造者模式 Demo...

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 【Java设计模式】创建型模式-建造者模式

    源代码:https://gitee.com/AgentXiao/BuilderPattern 一、用户 用于建造一...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

  • 建造者模式

    一、建造者模式介绍 二、建造者模式代码实例

  • 建造者模式

    建造者模式 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和...

网友评论

      本文标题:BuilderPattern建造者模式

      本文链接:https://www.haomeiwen.com/subject/dqisdktx.html