两种设计模式(单件,桥接)小结
两种设计模式(单件和桥接)的学习笔记:
代码
几类基本设计模式
1:单件模式
单件模式的作用:保证一个类只有一个实例。类中有一个静态方法,主要任务就是创建这个类的唯一实例。
//.h文件
#ifndef _SINGLETON_H
#define _SINGLETON_H
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* OneObject()
{
if (NULL==m_pSingleton)
{
m_pSingleton=new Singleton;
}
return m_pSingleton;
}
~Singleton()
{
cout<<"There is only one object..."<<endl;
}
private:
Singleton()
{
}
static Singleton* m_pSingleton;
};
Singleton* Singleton::m_pSingleton=NULL;
#endif
//.cpp文件
#include "Singleton.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
Singleton* s1=Singleton::OneObject();
Singleton* s2=Singleton::OneObject();
if (s1==s2)
{
cout<<"Only one object..."<<endl;
}
else
cout<<"Two object..."<<endl;
return 0;
}
2:桥接模式
桥接模式解决的问题:将抽象部分和实现部分分离,使他们可以独立变化。
举个例子:手机品牌和手机软件。
手机:有不同的品牌,Nokia,Sumsung等。
手机软件:各种各样的软件。
问题:原来一个品牌的手机只能装相应的手机软件,手机开发商和软件开商要协调好。局限性很大。
现在,手机生产商,只管生产手机;手机软件开发商只管开发软件,耦合性很低,互不干涉。
现在的要求:只要要用户有需求,就能把想安装的软件安装到自己手机上。
#include <iostream>
using namespace std;
//手机软件
class HandsetSoft
{
public:
virtual void Run()=0;
};
class HandsetAddressList:public HandsetSoft
{
public:
virtual void Run()
{
cout<<"手机通讯录"<<endl;
}
};
class HandsetGames: public HandsetSoft
{
public:
virtual void Run()
{
cout<<"手机游戏"<<endl;
}
};
//手机品牌
class HandsetBrand
{
public:
virtual void Run()=0;
void InstallHandsetSoft(HandsetSoft* temp) //new的是啥,就是啥软件,客户决定。
{
handsoft=temp;
}
protected:
HandsetSoft* handsoft; //是聚合关系。手机软件类----手机品牌
};
class HandsetBrandNokia:public HandsetBrand
{
public:
virtual void Run()
{
handsoft->Run(); //手机软件类,基类的指针handsoft指向了派生类的对象(new的对象)。
}
};
class HandsetBrandSumsung: public HandsetBrand
{
public:
virtual void Run()
{
handsoft->Run();
}
};
//client
int main()
{
HandsetBrand* brand=new HandsetBrandNokia;
brand->InstallHandsetSoft(new HandsetAddressList);
brand->Run();
brand->InstallHandsetSoft(new HandsetGames);
brand->Run();
return 0;
}
posted on 2010-08-16 22:39 marrywindy 阅读(278) 评论(0) 编辑 收藏 举报