设计模式之建造者模式

目录

1.建造者模式的概念

2.建造者模式的结构图

3.练习的例子

 4.总结


1.建造者模式的概念

2.建造者模式的结构图

3.练习的例子

抽象的建造类:建造生产产品的抽象流程(建造产品的流程固定了,但是没有具体的实现)

/**
 * 抽象的构建类
 * 注意其构建的流程是固定的
 */
abstract class PersonBuilder {

    public PersonBuilder(){}

    /**
     * 创建头部
     */
    abstract void buildHead();

    /**
     * 创建身体
     */
    abstract void buildBody();

    /**
     * 创建左胳膊
     */
    abstract void buildArmLeft();

    /**
     * 创建右胳膊
     */
    abstract void buildArmRight();

    /**
     * 创建左腿
     */
    abstract void buildLegLeft();

    /**
     * 创建右腿
     */
    abstract void buildLegRight();
}

肥胖的人的构建者:实现了固定流程的具体细节,可以理解成按照固定的流程创建了一条生产该具体产品的流水线
/**
 * 肥胖的人的构建者
 *
 */
public class PersonFatBuilder extends PersonBuilder{
    @Override
    void buildHead() {
        System.out.println("造胖人的头");
    }

    @Override
    void buildBody() {
        System.out.println("造胖人的身体");
    }

    @Override
    void buildArmLeft() {
        System.out.println("造胖人的左胳膊");
    }

    @Override
    void buildArmRight() {
        System.out.println("造胖人的右胳膊");

    }

    @Override
    void buildLegLeft() {
        System.out.println("造胖人的左腿");

    }

    @Override
    void buildLegRight() {
        System.out.println("造胖人的右腿");
    }
}

瘦人的构建者:

/**
 * 瘦小的人构建者
 *
 */
public class PersonThinBuilder extends PersonBuilder{
    @Override
    void buildHead() {
        System.out.println("造瘦人的头");
    }

    @Override
    void buildBody() {
        System.out.println("造瘦人的身体");
    }

    @Override
    void buildArmLeft() {
        System.out.println("造瘦人的左胳膊");
    }

    @Override
    void buildArmRight() {
        System.out.println("造瘦人的右胳膊");

    }

    @Override
    void buildLegLeft() {
        System.out.println("造瘦人的左腿");

    }

    @Override
    void buildLegRight() {
        System.out.println("造瘦人的右腿");
    }
}

 构建产品的指挥者:把需要生产的具体产品的建造对象传进来,调用build方法理解为流水线开始干活,只有流水线开始干活了产品才能被建造出来

/**
 * 构建产品的指挥者
 */
public class BuilderDirector {

    private PersonBuilder personBuilder;

    public BuilderDirector(PersonBuilder personBuilder){
        this.personBuilder = personBuilder;
    }

    /**
     * 开始构建
     * 其实就是让产品的固定生产流程走一遍这样才能生产出产品
     */
    public void build(){
        personBuilder.buildHead();
        personBuilder.buildBody();
        personBuilder.buildArmRight();
        personBuilder.buildArmLeft();
        personBuilder.buildLegRight();
        personBuilder.buildLegLeft();
    }
}

客户端:

public class main {
    public static void main(String[] args) {
        PersonFatBuilder personFatBuilder = new PersonFatBuilder();
        BuilderDirector builderDirector = new BuilderDirector(personFatBuilder);
        builderDirector.build();
        //瘦人同理
    }
}

控制台:


 4.总结

建造者模式是逐步建造产品的,所以建造者的Builder类(抽象构建类)里的那些建造方法必须要够普遍,以便为各种类型的具体建造者构造。

何时使用建造者模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

ps:本人会把建造者模式与外观模式搞混,现对这两个模式进行总结

外观模式:

外观类会拿到多种子系统对象的引用,而且这些对象的初始化都是在外观类的内部进行的,在使用的时候,是各个子系统调用各自的方法,且只需要new一个外观对象就可以进行使用。

建造者模式:

建造指挥者会拿到一种具体建造者对象(生产具体产品的流水线)的引用,在使用的时候,该建造者是调用自己的一系列建造方法;而且建造者会在外面(客户端)new一条建造具体对象的生产线,然后传给指挥者,指挥者才能指挥流水线按流程进行工作。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值