适配器模式
定义
将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。
类图
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Duck { public: virtual void quack() = 0; virtual void fly() = 0; };
class MallardDuck :public Duck { public: void quack() { cout << "MallardDuck quack!" << endl; }
void fly() { cout << "MallardDuck fly!" << endl; } };
class Turkey { public: void gobble(){ cout << "Turkey gobble!" << endl; }
void flyShort() { cout << "Turkey fly!" << endl; } };
class TurkeyAdapter :public Duck { public: void quack() { turkey->gobble(); }
void fly() { turkey->flyShort(); }
private: Turkey* turkey; };
|
理解
适配器持有一个被适配者,适配器的接口和适配目标的接口是一样的,当调用适配目标的接口时,适配器转而调用被适配者的对应方法。也就是说适配器拥有一个被适配对象,就可以为所欲为!