工厂模式:
通过使用共同的接口指向新创建的对象。目的是解决接口选择问题,创建的是抽象的对象让其子类实现工厂接口。
优点:调用者只需要关心产品接口,不需要知道产品的具体实现。
缺点,每次增加产品都需要增加具体类及其实现工厂,类的个数成倍增加导致系统复杂度增加和对类的依赖。
使用场景:日志记录器(记录到本地硬盘、系统事件、远程服务器)、数据库访问(各种类型数据库)、连接服务器(pop3、IMAP、HTTP多种协议)
抽象工厂模式
围绕一个超级工厂创建其他工厂;
使用场景:QQ换肤、生成不同操作系统的程序
单例模式
单例类只能有一个实例,并提供一个访问它的全局访问点。
目的是解决一个全局使用的类的频繁创建与销毁。
Singleton与Monostate
- Singleton关注结构,强制结构上的单一性,防止创建多个对象实例
- Monostate关注行为,强制行为上的单一性。
class Monostate{
public:
Monostate();
void SetData(int data);
int GetData();
~Monostate();
private:
static int _data;
};
Monostate的特点:
- 透明性:和普通对象没区别,只是数据域被声明为static
- 可派生性:Monostate可派生子类,且共享静态变量
- 多态性:Monostate方法不是静态,派生类可以覆写
- 性能:某些情况下比Singleton更好