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

一、概念

建造者模式(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();

三、与工厂模式的区别

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

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

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

相关推荐
monkey_meng3 天前
【Rust设计模式之建造者模式】
后端·设计模式·rust·建造者模式
谷丘-CODER5 天前
JAVA设计模式之【建造者模式】
java·设计模式·建造者模式
WaaTong5 天前
《重学Java设计模式》之 建造者模式
设计模式·建造者模式
->yjy5 天前
创建者模式之【建造者模式】
android·建造者模式
编程、小哥哥5 天前
设计模式之建造者模式(各项装修物料组合套餐选配场景)
设计模式·建造者模式
morning_judger12 天前
【设计模式系列】建造者模式(十)
java·设计模式·建造者模式
wrx繁星点点14 天前
创建型模式-建造者模式:构建复杂对象的优雅解决方案
java·开发语言·数据结构·数据库·spring·maven·建造者模式
zzzhpzhpzzz20 天前
设计模式——建造者模式
设计模式·建造者模式
小白20 天前
C# 创建型设计模式----建造者模式
设计模式·建造者模式
阳光开朗_大男孩儿24 天前
原型模式和建造模式的区别
开发语言·c++·设计模式·建造者模式·原型模式