适配器模式(adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。
有两类适配器模式:
·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。
下面我们可以看下类图:
下面开始一个小例子。假如你朋友从日本给你带来一个日本原装相机,只能使用110V的电压充电,你在国内想使用的话必须使用一个电压转换器把国内的220V电压转换成110V电压。如下图
220V的电压转换成110V给客户。
开始代码:
客户类:相机
这里只简单的实现了它的充电功能!
被适配者:220V中国电压
适配者:110V
这里没有定义接口,直接使用了实体类!
适配器:
测试用例:
测试结果:
Japan Voltage is 110V
can charge
中国电压是220V
the Voltage is not in conformity with the Camera
在这里使用的是对象适配器模式,在java中不支持多重继承,所以基本上没办法类继承方式。
但是使用接口加对象的方式试一下吧:
适配器:
然后测试一下:
测试结果:
中国电压是220V
转换为日本电压为110V
can charge
中国电压是220V
the Voltage is not in conformity with the Camera
适用性:
1. 系统需要使用现有的类,而此类的接口不符合系统的需要。
2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
3. (对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。
效果及优缺点:
对于类适配器:
1. 用一个具体的Adapter类对Adaptee和Taget进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。
2. 使得Adapter可以override(重定义) Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
对于对象适配器:
1. 允许一个Adapter与多个Adaptee,即Adaptee本身以及它的所有子类(如果有子类的话)同时工作。Adapter也可以一次给所有的Adaptee添加功能。
2. 使得override(重定义)Adaptee的行为比较困难。如果一定要override Adaptee的方法,就只好先做一个Adaptee的子类以override Adaptee的方法,然后再把这个子类当作真正的Adaptee源进行适配。
最后:本文用图是从Head.First设计模式书上截的图。想学好设计模式,可以好好看看那本书。
周末愉快。。。
如果觉得还可以的话,请帮忙顶一下吧。。。
分享到:
相关推荐
浅学RC充放电电路
浅学电子幸运大转盘知识
前言 使用过Vue和React的小伙伴肯定对虚拟Dom和diff算法很熟悉,它扮演着很重要的角色。由于小编接触Vue比较多,React只是浅学,所以本篇主要针对Vue来展开介绍,带你... <p class=title>Hello world!</p> </div> VN
此文粗略得介绍了pascal语言,学过初级编程的容易接受
二极管,三极管,PN接
1、XML AJAX: Asynchronous Javascript And Xml 1、什么是XML eXtensible Markup Language 可扩展的 标记 语言 XML的标记没有预定义过,需要自行定义 XML的宗旨是做数据传递的,而非... $xml.="<...>"; ....
1. 这个是git上朋友发的,我这就是蹭蹭人家流量了 2. 是一个时序预测的问题的数据集 3. 每个小时一个数据,每个batch训练的数据是前一周也就是196个小时,预测的结果是下一天的数据24小时
对字节序的一些理解。
这里就是通过布局文件中Button控件的属性值onClick=”click”实行回调函数click,代表着点击按钮有click方法响应。 回调函数代码如下,首先要通过id找到对应的按钮 myBtn_one.findViewById(R.id.btn_one);...
一份相当不错的Java大学基础教程 课件中还附有源代码,浅学易懂。
非常好的教程,浅学易懂,主要是基于centos的讲解
android开发应用详解教程,是一本非常不错的电子教程,浅学易懂,适合初学上手学习!
C语言上机归类,这个是浅学C语言的好资料,不过对付计算机二级C的编程部分的考试也是错错有余的。
(7)这篇文章只是为了供一些初学者免费学习(主要是当时哥们交作业的时候没有找到类似的,就浅学了一点点内容然后做出来的,内容肯定不够充实完整),不要不要直接当大作业交上去!!! 适用读者: 学习移动终端...
以下笔者将据个人浅学, 白话一下云计算的主要概念,或许有助于您认识它。 从理念说起 伟大的革新往往源自理念的闪现,云计算的产生肯定得益于超前的、大胆的想法。翻开云 计算的历史,1961年可以视为云计算元年,这...
基于Huffman编码思路的一个测试性压缩工具,但是由于个人水平原因(浅学的业余爱好者),并没有利用到Huffman编码的树状结构特点。另,由于快开学了......so,bug还没来得及修复,开学后有时间我会再打磨一下,另,...
oclhashcat.zip
我的选课建议和升学经验 .pages