zoukankan      html  css  js  c++  java
  • 生成器模式

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

    JDK

    • java.lang.StringBuilder
    • java.nio.ByteBuffer
    • java.lang.StringBuffer
    • java.lang.Appendable
    • Apache Camel builders
  • 相关阅读:
    [转]addEventListener() 方法,事件监听
    JavaScrpit判断横竖屏
    无法获得锁 /var/lib/dpkg/lock
    配置Meld为git的默认比较工具
    C#多线程之旅(7)——终止线程
    【SQL进阶】03.执行计划之旅1
    单问号和双问号
    聚集索引VS非聚集索引
    【T-SQL进阶】02.理解SQL查询的底层原理
    【T-SQL】系列文章全文目录(2017-06-26更新)
  • 原文地址:https://www.cnblogs.com/AnXinliang/p/9955451.html
Copyright © 2011-2022 走看看