摘要: 模拟场景: 需要构造一个运算器(Operation),分别负责加减乘除的运算功能。 思想: 这里需要构造四个 Operation,可以使用 Factory 去统一创建这四个对象。 所需要构造的对象是运算器(Operation),因为没有具体功能的运算器,是毫无作用的,所以可以将其定义为抽象类(Abs 阅读全文
posted @ 2017-09-14 17:31 Gerrard_Feng 阅读(531) 评论(0) 推荐(1)
摘要: 工厂 从 coding 的角度来说,在需要创建对象的时候,直接在方法内部使用 new 关键字来创建,是非常方便的。 然而从全局的角度考虑,这样会使对象变得难以管理和控制,代码会变得非常脆弱,缺乏弹性。 一旦对象创建的过程有了变动或者扩展,需要在所有调用的地方进行改变,很容易出错。 工厂,就是用来解决 阅读全文
posted @ 2017-09-14 14:58 Gerrard_Feng 阅读(209) 评论(0) 推荐(0)
摘要: 思想: 一个单例类,无论采取哪一种设计(单元素枚举类除外), 一旦间接或者直接实现 Serializable 接口,为了保证单例,就要多增加一点考虑:保证类在反序列化之后能够保证单例。 以上是一个单例的简单饿汉模式实现,实现了 Serializable 接口。从类名上也不难看出,这是个错误示例。 每 阅读全文
posted @ 2017-09-10 18:29 Gerrard_Feng 阅读(740) 评论(0) 推荐(0)
摘要: 思想: 登记模式,和前面5种单例不一样,从本质上来说,这是一种兼顾创建和管理单例的方法。 主要实现步骤是: 所有单例都继承于一个共同的父类。 子类通过父类完成单例的创建,父类使用反射创建子类。 父类持有一个 String-Object 的数据模型去存储创建出来的单例对象,一般称为 Registry。 阅读全文
posted @ 2017-09-10 18:12 Gerrard_Feng 阅读(660) 评论(0) 推荐(0)
摘要: 思想: 单元素的枚举类型已经成为实现 Singleton 的最佳方法。 —— 《Effective Java》 第三条:用私有构造器或者枚举类型强化 Singleton 属性 优势? 代码简洁。 基于 enum 的特性,有效地防止反射的入侵。 无偿提供了序列化的支持,但是不用加入 readResol 阅读全文
posted @ 2017-09-10 17:40 Gerrard_Feng 阅读(626) 评论(0) 推荐(0)
摘要: 思想: 这种静态代码块模式,本质上是饿汉模式的一个变种。 它将类的静态 Field 的初始化,转移到静态代码块中(这么做的优势尚不明确)。 在 JDK 源码中有一个具体的例子:sun.misc.Unsafe (是 Java 代码用来直接操作内存空间的类)。 实现方式,就是把初始化的工作,放到静态代码 阅读全文
posted @ 2017-09-10 17:32 Gerrard_Feng 阅读(1823) 评论(0) 推荐(0)
摘要: 思想: 相比于懒汉以及饿汉模式,静态内部类模式(一般也被称为 Holder)是许多人推荐的一种单例的实现方式,因为相比懒汉模式,它用更少的代码量达到了延迟加载的目的。 顾名思义,这种模式使用了一个私有的静态内部类,来存储外部类的单例,这种静态内部类,一般称为 Holder。 而利用静态内部类的特性, 阅读全文
posted @ 2017-09-10 17:21 Gerrard_Feng 阅读(12980) 评论(0) 推荐(1)
摘要: 思想: 相比于饿汉模式,懒汉模式实际中的应用更多,因为在系统中,“被用到时再初始化”是更佳的解决方案。 设计思想与饿汉模式类似,同样是持有一个自身的引用,只是将 new 的动作延迟到 getinstance() 方法中执行。 反射能否打破单例? 对于 LazySingleton,这是个很有趣的问题, 阅读全文
posted @ 2017-09-10 16:48 Gerrard_Feng 阅读(1703) 评论(0) 推荐(0)
摘要: 思想: 饿汉模式是最常提及的2种单例模式之一,其核心思想,是类持有一个自身的 instance 属性,并且在申明的同时立即初始化。 同时,类将自身的构造器权限设为 private,防止外部代码创建对象,对外只提供一个静态的 getInstance() 方法,作为获取单例的唯一入口。 为什么在私有构造 阅读全文
posted @ 2017-09-09 17:21 Gerrard_Feng 阅读(992) 评论(0) 推荐(0)
摘要: 单例 确保一个类只有一个实例,并提供一个全局访问点 —— 《Head First 设计模式》 其目的在于减少系统对于同一个对象的创建和销毁,从而减少内存的开销。 实现单例的方法 要了解如何保证一个类始终只有一个实例,首先需要知道,一个类是怎么创建实例的: Java 中创建对象的4种方式 以上文章,总 阅读全文
posted @ 2017-09-08 15:54 Gerrard_Feng 阅读(321) 评论(0) 推荐(0)