创建型(三) - 建造者模式

一、概念

建造者模式(Builder Pattern):也叫构建者模式,或生成器模式,指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。简单点就是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。

优点:封装性好,构建和表示分离。

缺点:产品的组成部分必须相同,如添加新的特征需要修改建造器。

使用场景:当构造器的参数过多,而且这些参数有些是可选的参数,参数间有相互依赖关系等需求时,可以考虑使用建造者模式。

二、实现

代码是创建一杯奶茶,奶茶名字是必须的,不然不知道做什么,然后两个可选字段,是否加珍珠和椰果。后面的例子就会报错,因为没有设置名称,就和你去奶茶店给人家说:要一杯奶茶,加珍珠和椰果。所以什么奶茶呢?

java 复制代码
public class MilkTea {
    private String mTeaName;
    private boolean mAddPearl;
    private boolean mAddCoconut;//椰果
    
    private MilkTea(Builder builder) {
        this.mTeaName = builder.mTeaName;
        this.mAddPearl = builder.mAddPearl;
        this.mAddCoconut = builder.mAddCoconut;
    }

    public static class Builder {
        private String mTeaName;
        private boolean mAddPearl;
        private boolean mAddCoconut;//椰果

        public MilkTea build() {
            if (TextUtils.isEmpty(mTeaName)) {
                throw new IllegalArgumentException("teaName is illegal");
            }
            return new MilkTea(this);
        }
        
        public Builder setTeaName(String teaName) {
            if (TextUtils.isEmpty(teaName)) {
                throw new IllegalArgumentException("teaName is illegal");
            }
            this.mTeaName = teaName;
            return this;
        }

        public Builder isAddPearl(boolean addPearl) {
            this.mAddPearl = addPearl;
            return this;
        }

        public Builder isAddCoconut(boolean coconut) {
            this.mAddCoconut = coconut;
            return this;
        }
    }
}
//使用
MilkTea milkTea = new MilkTea.Builder()    
            .isAddCoconut(true)
            .isAddPearl(true)
            .build();

三、与工厂模式的区别

工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。

建造者模式是用来创建同一种类型的复杂对象,通过设置不同的可选参数,"定制化"地创建不同的对象。

参考文章:
设计模式------建造者模式详解
极客时间《设计模式》(王争)

相关推荐
越甲八千2 天前
重拾设计模式--建造者模式
java·设计模式·建造者模式
抓哇FullStack-Junior4 天前
设计模式——建造者模式
java·开发语言·设计模式·建造者模式
西岭千秋雪_5 天前
设计模式の建造者&适配器&桥接模式
java·设计模式·建造者模式·桥接模式·适配器模式
W_Meng_H8 天前
设计模式-建造者模式
设计模式·建造者模式
重生之绝世牛码14 天前
Java设计模式 —— 【创建型模式】建造者模式详解
java·大数据·开发语言·设计模式·建造者模式·设计原则
全栈小酷Cool14 天前
【23种设计模式】建造者模式:理论剖析与Java实践
java·设计模式·建造者模式
lzz的编码时刻14 天前
建造者模式(Builder Pattern):优雅地构建复杂对象
java·设计模式·建造者模式
夜空晚星灿烂16 天前
C# 设计模式--建造者模式 (Builder Pattern)
设计模式·c#·建造者模式
shi578316 天前
设计模式之 建造者模式 C# 范例
设计模式·建造者模式
澄澈i25 天前
设计模式学习[11]---建造者模式
学习·设计模式·建造者模式