设计模式纵谈--单件模式

来源:互联网 发布:家庭紫外线消毒 知乎 编辑:程序博客网 时间:2024/06/11 04:59

模式分类

从目的来看:

--创建型模式:负责对象创建。

--结构型模式:处理类与对象间的组合。 组合和继承

--行为型模式:类与对象交互中的职责分配。组件之间的行为。

隔离变化 封装变化


从范围来看:

--类模式处理类与子类的静态关系。

--对象模式处理对象间的动态关系。


动机 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

原创粉丝点击