一、 作用
指的是把一件事的抽象和行为分开来。抽象可以简单地理解为属性,即把对象的属性和行为分开,降低耦合,这样便于扩展。
二、 模型图
三、 参与者
abstraction:一个抽象类,维护一个指向implementor的指针。
RefinedAbstraction:一个具体的对象。
implementor:一个抽象类,定义行为的接口。
ConcreteImplementor:具体实现行为的接口。
四、 操作流程
实例化一个具体的行为类,将它传给操作它的对象即RefinedAbstraction对象,由它来调用具体操作函数,实现预期的效果。
五、 比较
无。
六、 C++实现
人可以穿西装,牛仔,工装。
当然你也可以搞复杂点,在穿衣服上加上性别判断。
以下是C++代码实现:
#include <iostream>
using namespace std;
class WEAR
{
public:
virtual void WearClothing(void) = 0;
};
class person
{
public:
person(WEAR *pwear):m_pwear(pwear){}
void WearAction(void)
{
m_pwear->WearClothing();
}
private:
WEAR *m_pwear;
};
class WearSuit:public WEAR
{
public:
void WearClothing(void)
{
cout<<"I wear suit!"<<endl;
}
};
class WearJeans:public WEAR
{
public:
void WearClothing(void)
{
cout<<"I wear jeans!"<<endl;
}
};
class WearFrock:public WEAR
{
public:
void WearClothing(void)
{
cout<<"I wear frock!"<<endl;
}
};
class Woman:public person
{
public:
Woman(WEAR *pwear):person(pwear){}
};
class Man:public person
{
public:
Man(WEAR *pwear):person(pwear){}
};
int main(int argc, char **argv)
{
WEAR *psuit = new WearSuit;
WEAR *pjeans = new WearJeans;
WEAR *pfrock = new WearFrock;
//穿西装的妇女
person *woman1 = new Woman(psuit);
woman1->WearAction();
//穿牛仔的妇女
person *woman2 = new Woman(pjeans);
woman2->WearAction();
//穿工装的妇女
person *woman3 = new Woman(pfrock);
woman3->WearAction();
//穿西装的男人
person *man1 = new Man(psuit);
man1->WearAction();
//穿牛仔的男人
person *man2 = new Man(pjeans);
man2->WearAction();
//穿工装的男人
person *man3 = new Man(pfrock);
man3->WearAction();
delete psuit;
delete pjeans;
delete pfrock;
delete woman1;
delete woman2;
delete woman3;
delete man1;
delete man2;
delete man3;
return 0;
}