声明:本博文篇幅短,适合review。
一、概念
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
二、结构模式图
三、例子
class App
{
public:
virtual void run() = 0;
};
class PhotoShopApp : public App
{
public:
void run(){
cout<<"run PhotoShopApp"<<endl;
}
};
class FlashApp : public App
{
public:
void run(){
cout<<"run FlashApp"<<endl;
}
};
class Os
{
protected:
App * _app;
public:
void setSoft(App * app){
_app = app;
}
virtual void run(){}
};
class WinOs : public Os
{
public:
void run(){
_app->run();
}
};
class MacOs : public Os
{
public:
void run(){
_app->run();
}
};
void main()
{
Os * os1 = new WinOs();
os1->setSoft(new PhotoShopApp());
os1->run();
Os * os2 = new MacOs();
os2->setSoft(new FlashApp());
os2->run();
}
四、优缺点
1、优点
a、降低了代码冗余度,增加了类的可维护性,提高了可扩展性。
b、满足开闭原则。
c、分离了抽象和实现部分。
2、缺点
a、增加了系统的理解与设计难度。
b、使用时必须知道选择哪一种类型的实现。