Java/设计模式
myco前
这个作者很懒,什么都没留下…
展开
-
读《Effective Java》笔记之 第一条:考虑用静态工厂方法代替构造器
静态工厂方法与构造器相比的优势:它们有名称:可以更好地指示出使用这一方法创建出的对象所具有的特征。(尤其是当多个构造器只有参数顺序不同的时候)不必在每次调用的时候,都创建一个新的对象。这使得不可变类可以使用预先构建好的实例,或者作为缓存,重复利用。(例如 Boolean.valueOf(boolean))有助于控制类的实例(实例受控的类 instance-controlled)。可以返回原返回类型...原创 2018-07-03 00:15:00 · 277 阅读 · 0 评论 -
读《Effective Java》笔记之 第二条:遇到多个构造器参数时要考虑使用Builder
Builder例子:参照这篇博客,写得很详细了。Builder的好处:可读性好保证构建对象的过程中,不存在不一致的中间状态,也可以用于生成不可变对象如果需要可变长参数的话,构造器只能有一个可变长参数(由 '...' 所表示的参数);而通过Builder可以使用多个可变长参数范型的Builder是一个很好的抽象工厂。其实Java中最经典的抽象工厂是Class对象,newInstance方法充当了bu...原创 2018-07-03 00:38:54 · 207 阅读 · 0 评论 -
读《Effective Java》笔记之 第三条:强化单例的Singleton属性
使用公有静态工厂方法来获取实例构造器设为私有如果要防止通过反射调用私有构造器,可以修改构造器,在被要求创建第二个实例时抛出异常工厂方法提供了灵活性:如可以控制将单例改为每个线程返回一个实例等等...如果要序列化(实现Serializable接口),还需要声明所有实例域都是非持久的(transient),并提供一个readResolve方法。在readResolve方法中返回预先创建的单例。priv...原创 2018-07-03 00:49:19 · 550 阅读 · 0 评论 -
读《Effective Java》笔记之 第八条:覆盖equals时请遵守通用约定
不应覆盖equals的情况equals方法有许多覆盖方式都会导致错误,避免这种错误最简单的办法就是不覆盖equals方法。以下几种情况适合不去覆盖equals类的每个实例本质上都是唯一的 不需要“逻辑相等”的概念 超类已经覆盖了equals,从超类继承过来的行为对子类也是合适的 类是私有或包级私有的,可以确定它的equals方法永远不会被调用;不过这种情况,显然应该覆盖equals方...原创 2018-07-24 00:28:10 · 211 阅读 · 0 评论 -
读《Effective Java》笔记之 第四条:通过私有构造器强化不可实例化的能力
什么样的类需要具备不可实例化的能力通常来说的工具类(例如:java.util.Arrays)如何具备不可实例化的能力通过私有构造方法,并且方法中抛出异常,避免不小心在类的内部调用构造器。最好再加上一条注释,说明这个构造器的意义。同时带来的副作用这个类不能被子类化,子类需要显式或隐式得调用超类的构造器,这种情况下子类就没有可访问的超类构造器可调用了。...原创 2018-07-19 00:42:08 · 200 阅读 · 0 评论 -
读《Effective Java》笔记之 第五条:避免创建不必要的对象
应该避免创建对象的几种情况:字符串常量,不要写String s = new String("xxx"),写String s = "xxx" 不可变类通常可利用静态工厂方法来避免创造不必要的对象,如 Boolean.valueOf(String) 那些已知不会被修改的对象,可以被重用的对象 适配器、视图对象,例如Map#keySet方法所返回的对象 自动装箱的对象;Long acc = ...原创 2018-07-19 00:58:38 · 223 阅读 · 0 评论 -
读《Effective Java》笔记之 第六条:消除过期对象的引用
要解决的问题:内存泄漏(无意识的对象保持)例如,用数组和size自己实现一个栈,如果出栈后不把数组中的引用解除,则会始终保持着其引用。通常自己手工管理内存的地方需要格外注意消除过期引用的问题。其他常见导致内存泄漏的情况缓存 监听器和回调解决方法之一是使用弱引用...原创 2018-07-19 03:00:12 · 209 阅读 · 0 评论 -
读《Effective Java》笔记之 第七条:避免使用终结方法
@Overrideprotected void finalize() throws Throwable { try { ... } finally { super.finalize(); }}除非是以下几种情况:安全网(参考FileInputStream、FileOutputStream、Connection,防止调用方忘记显式...原创 2018-07-22 23:17:26 · 189 阅读 · 0 评论