设计模式之建造者模式

作者: GitCode8 | 来源:发表于2019-02-27 10:28 被阅读0次

建造者(Builder)模式,使用很多个简单的对象一步一步的构造成一个复杂的对象。将一个复杂对象的构建与表现分离,变与不变分离。提供链式调用,简单方便调用。属于创建型模式。在Android中,最常用的就非AlertDialog莫属了。
下面举个组装电脑的例子说明,程序员大多数会自己组装电脑,有时候帮朋友组装,为此我们可以根据朋友具体需求定制电脑,屏蔽电脑细节构建部分。这里的实现和其他的文章的参考不一样,主要是参考AndroidAlertDialog实现。
这里我们定义了实体类Computer,用来生成我们需要的电脑,带有CPU,主板,固态硬盘牌子的属性。同时我们内建了静态内部类Builder,用于构造 Computer,而且每个set方法都会返回本身this,用于链式调用。

public class Computer {
    private String CPU;
    private String mainboard;
    private String SSD;


    @Override
    public String toString() {
        return "CPU:" + CPU + " 主板:" + mainboard + " 固态硬盘:" + SSD;
    }

    public String getCPU() {
        return CPU;
    }

    public void setCPU(String CPU) {
        this.CPU = CPU;
    }

    public String getMainboard() {
        return mainboard;
    }

    public void setMainboard(String mainboard) {
        this.mainboard = mainboard;
    }

    public String getSSD() {
        return SSD;
    }

    public void setSSD(String SSD) {
        this.SSD = SSD;
    }


    public static class Builder {

        private final ComputerParams params;


        public Builder() {
            params = new ComputerParams();
        }

        Builder setCPU(String make) {
            params.CPU = make;
            return this;
        }


        Builder setMainboard(String make) {
            params.mainboard = make;
            return this;
        }


        Builder setSSD(String make) {
            params.SSD = make;
            return this;
        }


        Computer build() {
            Computer computer = new Computer();
            params.apply(computer);
            return computer;
        }
    }


}

在上面代码,我们可以注意到,我们定义了ComputerParams类,用于保存Builder设置的值,并在Builderbuild方法进行了应用。如果未设置相关属性,我们就设置默认值。

public class ComputerParams {
     String CPU;
     String SSD;
     String mainboard;

    public void apply(Computer computer){
        if (computer==null)
            return;

        if (CPU!=null){
            computer.setCPU(CPU);
        }else {
            computer.setCPU("默认");
        }

        if (SSD!=null){
            computer.setSSD(SSD);
        }else {
            computer.setSSD("默认");
        }

        if (mainboard!=null){
            computer.setMainboard(mainboard);
        }else {
            computer.setMainboard("默认");
        }
    }
}

这样下来,在朋友配置电脑的时候,没有什么特殊的需求,就可以直接组装电脑,有特殊需求,也可以进行定制。达到代码复用,构建快速的特点。

public class Main {
    public static void main(String[] args) {
        //需要一台定制的电脑
        Computer customComputer = new Computer.Builder()
                .setCPU("AMD 锐龙 7 2700X")
                .setMainboard("ASUS PRIME Z390-A")
                .setSSD("SAMSUNG 1TB")
                .build();

        System.out.println(customComputer.toString());

        //需要一台普通的电脑
        Computer generalComputer = new Computer.Builder().build();

        System.out.println(generalComputer.toString());
    }

}

组装结果

CPU:AMD 锐龙 7 2700X 主板:ASUS PRIME Z390-A 固态硬盘:SAMSUNG 1TB
CPU:默认 主板:默认 固态硬盘:默认

总结

  • 在一个复杂对象构建时,可以通过简单对象构建组成。实现代码的复用性、使用简洁性和灵活性。
  • 建造者模式和工厂 模式其实是很类似的,只不过建造者更适合用在更复杂的对象的构建,尤其需要定制的情况下。

相关文章

  • Android中涉及的模式

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

  • 设计模式之建造者模式

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

  • 设计模式之建造者模式

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

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

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

  • 设计模式之建造者模式

    设计模式之建造者模式 建造者模式 属于 创建型模式,提供一种创建对象的最佳方式。 创建型模式 指不是直接使用ne...

  • Retrofit

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

  • 设计模式 - 目录

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

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

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

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

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

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

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

网友评论

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

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