结合JDK源码看设计模式——建造者模式

概念:

  将一个复杂对象的构建与它的表示分离。使得同样构建过程可以创建不同表示
适用场景:

  1. 一个对象有很多属性的情况下
  2. 想把复杂的对象创建和使用分离

优点:

  封装性好,扩展性好

详解:
  工厂模式注重把这个产品创造出来即可,而建造者更关心创建的细节,当创建一个对象需要使用很多步骤去完成的时候,我们可以考虑建造者模式,当创建一个对象比较简单的时候,我们就可以使用工厂模式。通俗一点来理解,建造者模式更像是专门定做一个东西,还是拿上篇博客的例子来说,iterator()作为一个工厂方法,它是可以有不同的厂家,但是呢,它完成的都是遍历的功能,而建造者更像是你买一个戒指,你不仅仅要求它能戴在手上,更加希望你的名字被刻在上面这样。就是关注到产品细节的就可以用建造者模式。如果你还不理解,那我们来看下面的代码:

class Test{
public static void main(String[] args) {
StringBuilder s=new StringBuilder("你好").append(",我现在在研究").append("建造者模式").append("希望能有所收获.");
System.out.println(s);

}
}

 运行结果如下:

上面可以链式调用append()方法,在UML图(部分)里可以看见

拿其中一个append的方法就是

@Override
public StringBuilder append(char c) {
super.append(c);
return this;
}

StringBuilder的父类是AbstractStringBuilder抽象类。所以来到AbstractStringBuilder里面的append方法

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

  可以看见是要插入一个字符串,要先扩容,再在把这个值加入到value数组中。在这里多说一嘴,这也是StringBuilder,StringBuffer和String类最大的区别,在String底层是一个用final修饰的值不可变的数组,而AbstractStringBuilder中的数组是“值可变”的,下面是AbstractStringBuilder扩容的源码

private void ensureCapacityInternal(int minimumCapacity) {
// overflow-conscious code
if (minimumCapacity - value.length > 0) {
value = Arrays.copyOf(value,
newCapacity(minimumCapacity));
}
}

  也就是原来的数组拷贝到一个新的长度数组里面。这虽然原来的数组也是不可变的,但是放在JVM底层StringBuilder是只改了这个对象指向的区域里面的值,并没有改这个对象的指向区域。而String是直接new一个新对象,然后修改String旧对象指向的地方,来达到改值的操作。

总结:
  扯远了,现在回到建造者模式,建造者最常用的其实是想上面Test类中的链式调用,因为我可以订做这个产品的具体细节,你再给我多少个append()或者一些其他方法调用,我返回的还是StringBuilder这个对象,也就是这个产品不变,但是里面的细节我有要求你给我做成什么样的。可以和之前的工厂模式对比着看,会更有体会。

转载于:https://www.cnblogs.com/Cubemen/p/10631747.html

1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑。2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,比如 单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种实现)、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值