模式分类
从目的来看:
--创建型模式:负责对象创建。
--结构型模式:处理类与对象间的组合。 组合和继承
--行为型模式:类与对象交互中的职责分配。组件之间的行为。
隔离变化 封装变化
从范围来看:
--类模式处理类与子类的静态关系。
--对象模式处理对象间的动态关系。
动机 Motivation
在软件系统中,经常有这样一些特殊类,必须保证它们在系统中只存在一个实例,才能
确保它们的逻辑正确性,以及良好的效率。
如何绕开常规的构造器,提供一种机制来保证一耳光类只有一个实例?
这应该是类设计者(类本身)得责任,而不是使用者(客户)的责任。
意图 Intent
保证一个类仅有一个实例,并提供一个该实例的全局访问点。
结构 Structure
单线程Singleton模式的几个要点
《1》Singleton模式中的实例构造器可以设置为 protected以允许子类派生
《2》Singleton模式一般不要支持ICloneable接口,因为这可能导致多个对象实例
《3》Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例。
《4》Singleton模式只考虑到了对象创建管理,没有考虑对象销毁的管理,就支持垃圾回收的平台和对象的开销来讲
,我们一般没有必要对其销毁进行特殊的管理。
真正写的好的代码是一看就明白,就清楚含义。越简单,越好。代码让人一看,就明白,就是高手写的代码
简单就是美。
注释不是越多越好,通过方法名和代码块就能很清楚理解代码的含义,才是好的代码,好的设计。
Singleton模式扩展
《1》将一个实例扩展到N个实例,例如对象池的实现。 【多例模式】
《2》将new构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有某个类
的一个实例
《3》理解和扩展Singleton模式的核心是 如何控制用户使用new对一个类的实例构造器的任意调用。
模式不是死的。模式是解决一类问题,但是一类问题也会变化。
推荐参考书
• 《设计模式:可复用面向对象软件的基础》GoF
• 《面向对象分析与设计》Grady Booch
• 《敏捷软件开发:原则、模式与实践》Robert C. Martin
• 《重构:改善既有代码的设计》Martin Fowler
• 《Refactoring to Patterns》Joshua Kerievsky