两种设计模式(单件,桥接)小结

两种设计模式(单件和桥接)的学习笔记:

 

代码
几类基本设计模式
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编辑  收藏  举报

导航