如图,代理类与委托类均为客户类的实现,代理类可将委托类的功能做扩展,见代码:
//a 类包含b 类, a, b均实现协议类, 接口统一架构不变, 功能扩展
//本质,使用兄弟类代码,继承虚函数重写用不了
#include <iostream>
using namespace std;
class Fruit
{
public:
virtual void getFruit() = 0;
protected:
private:
};
class Banana : public Fruit //实现关系
{
public:
virtual void getFruit()
{
cout << "我是香蕉...." << endl;
}
protected:
private:
};
class south_Banana : public Fruit //实现关系
{
public:
virtual void getFruit()
{
myFruit = new Banana();
myFruit->getFruit();
cout << "但我是南方香蕉...." << endl;
}
virtual ~south_Banana()
{
if (myFruit != NULL)
{
delete myFruit;
myFruit = NULL;
}
}
protected:
private:
Fruit* myFruit;
};
void main()
{
Fruit* ptr = new south_Banana();
ptr->getFruit();
delete ptr;
ptr = new Banana();
ptr->getFruit();
delete ptr;
return;
}