美文网首页
设计模式—建造者

设计模式—建造者

作者: 君莫看 | 来源:发表于2018-01-17 15:57 被阅读0次

1、定义

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

2、建造者UML

建造者模式UML建模,来源与网络截取

3、怎么来理解构造者呢?

我们来举个例子,就以我的台式机组装电脑来说,案例就叫做Lawrence的电脑。首先电脑(Product)都是由显示器,主机,键盘,鼠标构成(Product属性),而这些部件又是必不可少的,所以可以抽取形成Builder;而我的显示器和主机都是DELL品牌的,键盘是樱桃的,鼠标是罗技的,这些其实就是Builer的一个具体实现即ConcreteBuilder;而这些部件到我的手里要形成一个可以运行的电脑,就需要将他们组装起来,这个过程就是Director;最后组装完毕的电脑也就是Product,下面按这个流程我们来实现下我们的代码。

// Product
public class Computer {
    public String mScreen = ""; // 显示器
    public String mMainframe = ""; // 主机
    public String mKeyboard = ""; // 键盘
    public String mMouse = ""; // 鼠标

    @Override
    public String toString() {
        return "Computer{" +
                "显示器:'" + mScreen + '\'' +
                ", 主机:'" + mMainframe + '\'' +
                ", 键盘:'" + mKeyboard + '\'' +
                ", 鼠标:'" + mMouse + '\'' +
                '}';
    }
}
//Builder
public abstract class ComputerBuilder {
    // 显示器
    abstract void buildScreen();
    // 主机
    abstract void buildMainframe();
    // 键盘
    abstract void buildKeyboard();
    // 鼠标
    abstract void buildMouse();
}
// ConcreteBuilder
public class LawrenceComputerBuilder extends ComputerBuilder {
    private Computer mComputer = null;

    public LawrenceComputerBuilder() {
        mComputer = new Computer();
    }

    @Override
    void buildScreen() { mComputer.mScreen = "DELL显示器"; }
    @Override
    void buildMainframe() { mComputer.mMainframe = "DELL主机"; }
    @Override
    void buildKeyboard() { mComputer.mKeyboard = "樱桃机械键盘"; }
    @Override
    void buildMouse() { mComputer.mMouse = "罗技游戏鼠标"; }

    public Computer getProduct() { return mComputer; }
}
// Director
public class ComputerDirector {
    public void construct(ComputerBuilder builder) {
        builder.buildScreen();
        builder.buildMainframe();
        builder.buildKeyboard();
        builder.buildMouse();
    }
}

测试代码:

public static void builderTest() {
    // 创建构造器
    ComputerDirector computerDirector = new ComputerDirector();
    // 创建 Lawrence 电脑的构造方案
    LawrenceComputerBuilder lawrenceComputerBuilder = new LawrenceComputerBuilder();
    // 组装 电脑
    computerDirector.construct(lawrenceComputerBuilder);
    // 查看 成品电脑信息
    Computer lawrenceComputer = lawrenceComputerBuilder.getProduct();
    System.out.println(lawrenceComputer.toString());
}

运行结果:

01-17 15:34:57.740 24051-24051/com.ktln.must I/System.out: Computer{显示器:'DELL显示器', 主机:'DELL主机', 键盘:'樱桃机械键盘', 鼠标:'罗技游戏鼠标'}

4、构造者模式的优点

  • 构建流程统一化,不容易出现构建流程缺失
  • 将复杂的对象创建拆分,过程更加清晰


这就是我对建造者模式的理解,同时附上一份chenssy的# 设计模式读书笔记-----建造者模式
,个人觉得chenssy分析的更加细致透彻,此文更多是作为自己的一份学习记录

相关文章

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

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

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • 深圳7000+

    2019年的目标,努力 1.设计模式-建造者模式(抽象建造者,具体建造者,创建对象,指挥者),优点,缺点,使用场景...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式-构建者模式

    概念 建造者模式(英:Builder Pattern)是一种创建型设计模式,又名:生成器模式。GOF 给建造者模式...

网友评论

      本文标题:设计模式—建造者

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