设计模式笔记之 - Singleton & Monostate
这两个模式的作用都是为了使对象具有唯一性的特征,只是在实现上稍有差别,Singleton一般使用类的静态方法返回类的实例从而构造对象,这样可以先判断对象是否创建,如果创建就使用已创建的对象,这样保持了对象的唯一性,这在与构造一般对象时有所不同。Monostate模式表示用静态变量存储类的字段,这样,无论有多少个对象,所处理的内部字段都是一样,从而达到的效果也是一样,它在使用上与一般的对象是没有差别的,只是也能通过继承方便的派生出其他对象。
Singleton的特点:
l 适用于任何类,只要把构造函数变为私有增加相应的静态函数即可。
l 可以透过派生创建,给定一个类可以创建Singleton的子类。
l 延迟求值,只有真正需要的时候才创建对象。
l 销毁方法未定义,没有一致的销毁方法。
l 不能继承,从Singleton派生出来的类并不是Singleton类。
l 效率问题,每次创建的时候都要检查是否未空引用。
l 不透明性,使用者知道正在使用一个Singleton类,因为要调用Instance方法创建对象。
Monostate的特点:
l 透明性,使用Monostate对象和使用常规对象没什么区别。
l 可派生,可以派生出其他Monostate类。
l 多态性,由于方法不是静态的这就可以在派生类中复写它们,因此不同的派生类可以与基类表现不同的行为。
l 不可转换性:不能通过派生类把常规类转换成Monostate类。
l 效率问题:创建了真正的对象这样带来创建和销毁的开销。
l 内存占用:创建新对象必然造成内存占用。