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

一、概念

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

三、与工厂模式的区别

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

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

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

相关推荐
学步_技术1 天前
Python编码系列—Python建造者模式:构建复杂对象的优雅之道
开发语言·python·建造者模式
ok!ko4 天前
设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)
java·设计模式·建造者模式
努力编程的阿伟4 天前
二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)
设计模式·建造者模式
AI让世界更懂你6 天前
漫谈设计模式 [5]:建造者模式
python·设计模式·建造者模式
coffee_baby8 天前
Java实现建造者模式和源码中的应用
java·开发语言·建造者模式
Aloha_up9 天前
建造者模式builder
建造者模式
idealzouhu10 天前
设计模式——建造者模式
java·设计模式·建造者模式
丶白泽10 天前
重修设计模式-创建型-建造者模式
java·设计模式·建造者模式
luciferau15 天前
设计模式-建造者模式
ide·设计模式·建造者模式
200不是二百15 天前
String核心设计模式——建造者模式
java·设计模式·建造者模式