当调用方使用“管理类”的惯常手法时,要写出类似如下的调用代码:

IDBMemberNameCardManager ncMgr = MemberFacade.GetInstance().CreateDBMemberNameCardManager();
IMemberNameCard nc = ncMgr.ReadMemberNameCard(currentMember.Id);
//将名片中的公司名显示在Label中
this.LabelCompany.Text = nc.Company;

这样一来,调用方需要知道
1、领域信息接口 即上述表示名片信息的接口 IMemberNameCard 以及 currentMember(当前的用户),即“领域(Domain)类”。
2、存取领域信息的方法接口,即上述 IDBMemberNameCardManager ,亦即所谓“管理(Manager)类”。
3、取得管理类的门面,即上述的MemberFacade,也即为类厂。

现在我们改用另外一种模式:

IMemberNameCardAdapter adapter = (IMemberNameCardAdapter)currentMember.GetAdapter(typeof(IMemberNameCardAdapter));
if(adatper != null)
{
    IMemberNameCard nc = adapter.ReadMemberNameCard();
     this.LabelCompany.Text = nc.Company;
}

使用这种方式的话,调用方需要知道的东西少了“门面”,只需要知道领域信息和存取接口。是不是看起来更加简洁  ?
 这个模式在 Eclipse 中运用得很多,可以在领域类上添加许多不同的适配器,而不需要让领域类直接实现新的接口,从而避免了“接口肿胀”。
让客户知道得越少越好,我想这就是这个模式的精髓所在了。

注:这个模式的支持需要某些环境支持,我之前也上传过一个关于适配器模式的C#项目,模拟了这种支持。

转载于:https://www.cnblogs.com/xiaotaoliang/archive/2005/08/13/214235.html

Adapter模式的好处相关推荐

  1. 小例子背后的大道理——Adapter模式详解

    上回问题回顾 前文说到一位用户拿着业界标准开关(一个标准的StandardSwitcher,它依赖IStandardSwitchable接口才能工作,然而目前我们的灯并不支持这个接口)出现在我面前,叫 ...

  2. 结构型模式之Adapter模式

    1.意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 2.适用性 以下情况使用Adapter模式 (1)你想使用一个已经存 ...

  3. 设计模式-Adapter模式

    目录 相关概念 对象适配器 类适配器 一个例子 总结 适配器模式(Adapter Pattern)是结构型模式.主要用来解决接口不兼容的问题,将一个类的接口变换成客户端所期待的另一种接口,从而使原本因 ...

  4. 打造炫酷通用的ViewPager指示器 Adapter模式适配所有 1

    ###1.概述 上一期我们已经写了一篇 打造炫酷通用的ViewPager指示器 - 玩转字体变色 可是这种效果虽然绚烂可以装装A和C之间,但是在实际的大多数效果中并不常见,只是在内涵段子中有这个效果而 ...

  5. 设计模式--适配器(Adapter)模式

    模式定义 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 类图 应用场景 1.当你希望使用某些现有类,但其接口与你的其他代码不兼容时: 2 ...

  6. 也说说“从Adapter模式到Decorator模式”

    为什么80%的码农都做不了架构师?>>>    终于有时间写点什么了,可以前酝酿好的东西似乎一下子都忘记了.这几天看了wayfarer的<<让僵冷的翅膀飞起来>系列 ...

  7. java设计模式adapter_Java设计模式--适配器(Adapter)模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极.阴极 ...

  8. 用Adapter模式重构以前系统的登录权限验证

    Adapter模式概述 Adapter模式有两种形式,一种是类的形式,一种则是对象的形式.目标就是用Adapter将原本不兼容的几个接口可以一起工作,简单的说,就是将引用的东西转变成我们自己系统需要的 ...

  9. VirtualBox linux 网络设置 Bridged Adapter模式

    virtualbox下linux 请检查有没有设置开机启动网络,默认是没有开启的.#vi /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes #这 ...

最新文章

  1. 南京廖华计算机二级考试答案,计算机二级Excel表格题库答案(解题步骤)
  2. 牛客网暑期ACM多校训练营(第三场)H - Diff-prime Pairs
  3. Project Euler 92:Square digit chains 平方数字链
  4. linux i2c adapter 增加设备_LINUX设备驱动模型分析之四 设备模块相关(DEVICE)接口分析...
  5. NOI Online能力测试2视频版,让我们看看出题专家怎么说!(入门组)
  6. mac apache php.ini,Mac自带的Apache使用详解
  7. TOONTRACK Electronic Edge EZX(Toontrack打击乐扩展包)
  8. python 克里金空间插值_Python-pykrige包-克里金(Kriging)插值计算及可视化绘制
  9. 求助,我在Kell官网上下载的固件库,双击运行后显示错误:Zip integrity check failed.,该怎么解决?
  10. Apollo 3.0来了!百度自动驾驶硬件系统全解读
  11. python3斐波纳契数列
  12. iOS 上传ipa包成功找不到ITMS-90338: Non-public API usage
  13. 面经合集(包含python、mysql、linux、测试等内容)
  14. PHP - Sessions
  15. 四种软件架构,看看你属于哪个层次
  16. SYSTRAN翻译系统的工作原理
  17. 王传福以350亿元登顶中国首富
  18. Elasticsearch 5.4新闻搜索项目实战
  19. jdk环境变量配置完成后,如何检验?
  20. linux 压缩文件解压到到指定的目录

热门文章

  1. 学习笔记之Iframe
  2. 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第7节 内部类_14_匿名内部类的注意事项...
  3. Python(17)_urllib下的parse的编码解码函数
  4. [School Life - Study] 有哪些每天坚持效果显著的高中学习习惯?
  5. 17秋 软件工程 团队第五次作业 Alpha
  6. IOS之同步请求、异步请求、GET请求、POST请求
  7. hdu1505 暴力或dp优化
  8. 【Android 组件化】路由组件 ( 页面跳转参数依赖注入 )
  9. 【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )
  10. 【网络安全】网络安全攻防 -- 黑客攻击简要流程