| xhliu 的个人资料青蛙王子的工作空间照片日志列表 | 帮助 |
|
12月21日 设计模式: AdapterAdapter其实是一种封装.举例子如下:
我们有四种类
1) 苹果: public 水果
2) 梨: public 水果
3) 香蕉: public 水果
4) 玉米
而水果有一个接口,可以知道他的重量.玉米没有这样的借口.
class 水果
{
virtual int Weight();
}
在程序中遇到这样的情况,最理想的是用一个for循环来遍历所有的水果,可以分别得到他们的重量,但是,居然有玉米!!一个玉米让我们没有办法用for循环,只能用if else语句.那有没有什么方法可以解决这个问题呢? 当然有,就是我们的adapter.
这里玉米就是adaptee, 我们可以生成一个叫做 "玉米果" 的adapter,有两种方法,如下:
1) class 玉米果: public 水果,private 玉米
{
virtual int Weight();
}
2) class 玉米果: public 水果
{
private:
玉米的实例.
public:
virtual int Weight();
}
这两种方法都在程序上保证了玉米果是一个"水果",他已经不再保证他具有"玉米"的特征(私有继承和私有变量)
如果采用"class 玉米果: public 水果,public 玉米"的方法,那么就是一个双向适配器
可插入适配器: 可插入适配器的核心特征为,他不光可以为一个类做适配工作,还可以为很多类作适配工作. 比如上面的例子,我们又出现了 红薯,土豆 等等,如果我们的适配器可以满足这些操作,那么就称之为 可插入适配器.
可插入适配器需要寻找这些类的共同接口集合,或者使用proxy 引用通告此日志的引用通告 URL 是: http://flyingfrog1980.spaces.live.com/blog/cns!515A924507F2FEA5!138.trak 引用此项的网络日志
|
|
|