龗孖 龗孖
首页
  • JAVA
  • 设计模式
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 页面

    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

靇孖

某微型企业非牛逼技术专家。
首页
  • JAVA
  • 设计模式
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 页面

    • HTML
    • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 设计模式
  • 设计模式-单例
  • 设计模式-中介者
  • 设计模式-享元
  • 设计模式-代理
  • 设计模式-原型模式
  • 设计模式-命令
  • 设计模式-备忘录
  • 设计模式-外观
  • 设计模式-工厂方法
  • 设计模式-抽象工厂
  • 设计模式-桥接
  • 设计模式-模板方法
  • 设计模式-状态
  • 设计模式-生成器
    • 5. 生成器(Builder)
      • Intent
      • Class Diagram
      • Implementation
      • JDK
  • 设计模式-空对象
  • 设计模式-策略
  • 设计模式-简单工厂
  • 设计模式-组合
  • 设计模式-装饰
  • 设计模式-观察者
  • 设计模式-解释器
  • 设计模式-访问者
  • 设计模式-责任链
  • 设计模式-迭代器
  • 设计模式-适配器
  • 设计模式
  • 设计模式
龗孖
2023-07-20
目录

设计模式-生成器

# 5. 生成器(Builder)

# Intent

封装一个对象的构造过程,并允许按步骤构造。

# Class Diagram


# Implementation

以下是一个简易的 StringBuilder 实现,参考了 JDK 1.8 源码。

public class AbstractStringBuilder {
    protected char[] value;

    protected int count;

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

    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)
            expandCapacity(minimumCapacity);
    }

    void expandCapacity(int minimumCapacity) {
        int newCapacity = value.length * 2 + 2;
        if (newCapacity - minimumCapacity < 0)
            newCapacity = minimumCapacity;
        if (newCapacity < 0) {
            if (minimumCapacity < 0) // overflow
                throw new OutOfMemoryError();
            newCapacity = Integer.MAX_VALUE;
        }
        value = Arrays.copyOf(value, newCapacity);
    }
}
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
public class StringBuilder extends AbstractStringBuilder {
    public StringBuilder() {
        super(16);
    }

    @Override
    public String toString() {
        // Create a copy, don't share the array
        return new String(value, 0, count);
    }
}
1
2
3
4
5
6
7
8
9
10
11
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
2
3
4
5
6
7
8
9
10
abcdefghijklmnopqrstuvwxyz
1

# JDK

  • java.lang.StringBuilder (opens new window)
  • java.nio.ByteBuffer (opens new window)
  • java.lang.StringBuffer (opens new window)
  • java.lang.Appendable (opens new window)
  • Apache Camel builders (opens new window)
上次更新: 2024/11/03, 21:31:17
设计模式-状态
设计模式-空对象

← 设计模式-状态 设计模式-空对象→

最近更新
01
树中两个节点的最低公共祖先
10-17
02
hexo多平台多博客网站同步
09-04
03
最长不含重复字符的子字符串
09-03
更多文章>
Theme by Vdoing | Copyright © 2015-2024 Ling ma | 996.icu | 京ICP备16011424号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式