设计模式-Builder模式

Builder模式

Posted by XYH on March 17, 2020

-wiki百科

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

在Android SDK里有很多地方也使用了Builder模式,如经典的AlertDialog#Builder

优点:

  • 建造者独立,易扩展。

缺点:

  • 构造对象需要有共同点,范围有限制。

例子: 麦当劳点餐的时候有个套餐,红白 1+1,红区选择1个商品,白区选择1个商品。

当然这是个简单的例子,但是如果要选5-6个类型的商品的时候,使用Builder模式的好处就能更加体现出来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class McDonaldOrder {

    private final String white;
    private final String red;

    private McDonaldOrder(Builder builder) {
        this.white = builder.white;
        this.red = builder.red;
    }

    public String getRed() {
        return red;
    }

    public String getWhite() {
        return white;
    }

    static class Builder {
        private String white;
        private String red;

        public Builder withWhite(String white) {
            this.white = white;
            return this;
        }

        public Builder withRed(String red) {
            this.red = red;
            return this;
        }

        public McDonaldOrder build() {
            if (red == null || white == null) {
                throw new NullPointerException("套餐务必选择1红1白");
            }
            return new McDonaldOrder(this);
        }

    }
}

选择套餐。

1
2
3
4
 McDonaldOrder mOrder = new McDonaldOrder.Builder()
                .withWhite("薯条")
                .withRed("可乐")
                .build();