单例模式
1、简单的线程不安全的单例模式代码
class CSingleton
{
private:
CSingleton() //构造函数是私有的,外部将不能通过构造函数创建一个实例
{
}
static CSingleton *m_pInstance; //私有的、唯一的实例
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判断是否第一次调用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
用户访问唯一实例的方法只有GetInstance()成员函数。如果不通过这个函数,任何创建实例的尝试都将失败,因为类的构造函数是私有的。
参考:C++中的单例模式
2、抽象工厂模式
抽象工厂模式定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
官方的定义一般都不易理解,我们就来模拟一个场景来说明一下这其中的关系吧。
富士康公司给两个品牌作代工产品:苹果和三星。众所周知,这两个品牌都有手机和平板产品,由于生产工艺的不同,富士康开设了两条生产线,一条线只生产手机,另一条线只生产平板,总负责人是车间主任老王。一个卖苹果设备的采购商找到老王,说先给我来1台苹果的iPad, 老王转身到生产平板的生产线上的操作台,往电脑里输入“苹果牌”三个字,很快1台iPad生产出来了。采购商又说,再给我来1台苹果的iPhone吧,老王又转身到手机的生产线,在电脑里输入“苹果牌”,很快一台iPhone又造好了。
看出来了吗?这里有两种抽象的产品(苹果产品和三星产品),而每种抽象的产品都有两种产品角色(手机和平板电脑),这样就要建立两种工厂(手机工厂和平板工厂)分别负责不同产品角色的实例化。 老王就是工厂的总接口,他负责帮你找到正确的生产工厂,并且拿到你想要的那一种类型的产品。
每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构。有多少个产品等级结构,就会在工厂角色中发现多少个工厂方法。每一个产品等级结构中有多少个具体的产品,就有多少个产品族,也就会在工厂等级结构中发现多少个具体工厂。总结一下我认为可以应用到抽象工厂模式的实际例子:
- 两种产品:PC和MAC,两种产品等级:RAM,CPU
- 两种产品:水果和蔬菜,两种产品等级:南方特产,北方特产
- 两种产品:男人和女人,三种产品等级:黄种人,黑人,白人
就类似这种结构的对象关系都可以用抽象工厂模式来构造。。。。。