结构模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构。结构模式描述两种不同的东西:类与类的实例。根据这一点,结构模式可以分为类的结构模式和对象的结构模式。
结构模式包括以下几种:
- 适配器模式(Adapter):
- 合成模式(Composite):
- 装饰模式(Decorator):
- 代理模式(Proxy):
- 享元模式(Flyweight):
- 门面模式(Facade):
- 桥梁模式(Bridge):
一、 适配器(Adapter)模式
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。
#ifndef ADAPTER_H_
#define ADAPTER_H_
class Target
{
public:
Target(){}
virtual~ Target(){}
virtual void Request() =0 ;
};
class Adaptee
{
public:
Adaptee();
virtual~ Adaptee();
void SpecialRequest();
};
class Adapter : public Target
{
public:
Adapter(Adaptee* apAdaptee);
virtual ~Adapter();
virtual void Request();
private:
Adaptee* m_pAdaptee;
};
#endif
#include "stdafx.h"
#include "Adapter.h"
#include <iostream>
using namespace std;
Adaptee::Adaptee()
{
cout<<"Adaptee::Adaptee()"<<endl;
}
Adaptee::~Adaptee()
{
cout<<"Adaptee::~Adaptee()"<<endl;
}
void Adaptee::SpecialRequest()
{
cout<<"Adaptee::SpecialRequest()"<<endl;
}
Adapter::Adapter(Adaptee* apAdaptee)
{
cout<<"Adapter::Adapter()"<<endl;
m_pAdaptee = apAdaptee;
}
void Adapter::Request()
{
cout<<"Adapter::Request()"<<endl;
m_pAdaptee->SpecialRequest();
}
Adapter::~Adapter()
{
delete m_pAdaptee;
m_pAdaptee = NULL;
cout<<"Adapter::Adapter()"<<endl;
}
#include "stdafx.h"
#include "Adapter.h"
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
Adaptee* lpAdaptee = NULL;
lpAdaptee = new Adaptee;
Adapter* lpAdapter = NULL;
lpAdapter = new Adapter(lpAdaptee);
lpAdapter->Request();
delete lpAdapter;
lpAdaptee = NULL;
system("pause");
return 0;
}