xhliu 的个人资料青蛙王子的工作空间照片日志列表 工具 帮助

日志


12月21日

设计模式: Adapter

Adapter其实是一种封装.举例子如下:
 
我们有四种类
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

评论

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

引用通告

此日志的引用通告 URL 是:
http://flyingfrog1980.spaces.live.com/blog/cns!515A924507F2FEA5!138.trak
引用此项的网络日志