设计模式 - 生成器模式

目录

一. 前言

二. 实现


一. 前言

       又叫建造者模式,是一种对象构建模式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

二. 实现

建造者模式有4种角色:
1. Product(产品角色):一个具体的产品对象。
2. Builder(抽象建造者):创建一个产品对象的各个部件的接口/抽象类。
3. ConcreteBuilder(具体建造者):实现或继承抽象建造者接口,具体地构建和装配各个部件。
4. Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。负责指挥构建一个工程,决定了工程如何构建,按照什么顺序构建。

参考 StringBuilder 实现:

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    char[] value;

    int count;

    public AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

    public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }

    public AbstractStringBuilder append(char c) {
        ensureCapacityInternal(count + 1);
        value[count++] = c;
        return this;
    }

    private void ensureCapacityInternal(int minimumCapacity) {
        // overflow-conscious code
        if (minimumCapacity - value.length > 0) {
            value = Arrays.copyOf(value,
                    newCapacity(minimumCapacity));
        }
    }
}
public class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence {
    public StringBuilder() {
        super(16);
    }

    @Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
    }

    @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

    @Override
    public String toString() {
        // Create a copy, don't share the array
        return new String(value, 0, count);
    }
}
public class Client {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        final int count = 26;
        for (int i = 0; i < count; i++) {
            sb.append((char) ('a' + i));
        }
        System.out.println(sb.toString());
    }
}

源码中建造者模式角色分析:
1. Appendable接口,是抽象建造者,定义了抽象方法,定义了多个append方法(抽象方法)
2. AbstractStringBuilder抽象类,实现了Appendable接口方法,AbstractStringBuilder 是建造者,只是不能实例化
3. StringBuilder 继承了AbstractStringBuilder,即充当了指挥者角色,同时充当了具体的建造者,建造方法的实现是由 AbstractStringBuilder 完成,而 StringBuilder 继承了 AbstractStringBuilder

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流华追梦

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值