单例模式被认为是职责模式,这是因为它将创建对象的控制权委托到一个单一的访问点上。在任何时候,应用程序中都只会有这个类仅有的一个实例存在。这可以防止我们去打开数据库的多个连接或者不必要地使用多余的系统资源。在更复杂的系统中,使用单例模式在维持应用程序状态的同步方面也尤其有用。
所有的单例模式至少拥有以下三种公共元素:
1. 它们必须拥有一个构造函数,并且必须被标记为private
2. 它们拥有一个保存类的实例的静态成员变量
3. 它们拥有一个访问这个实例的公共的静态方法
单例类不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
以下为封装数据库连接对象的一个单例类:
工厂类是指包含了一个专门用来创建其它对象的方法的类,工厂类在多态性编程实践中是至关重要的。
工厂模式通常用来返回符合类似接口的不同的类。工厂的一种常见用法就是创建多台的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应该实例化哪一个类。
以下范例使用工厂类解释图像文件: