设计模式之第15章-适配器模式(Java实现)
设计模式之第15章-适配器模式(Java实现)
“呔,来着何人,报上名来。”“这是谁啊,我怎么没见过”,“就是啊,我也没印象。”“我当然是适配器了,要不然还能是谁。”适配器模式碎碎念:我不就是昨天把你们的烤串都吃完了么,至于这么对我么。(作者按:嘿嘿,让你抢我东西吃,现在你的脸已被我画的连你妈都不认识了,何况他们乎~),“唉唉,别围着他了,我们先看看他耍什么花招。”
适配器模式之自我介绍
没错,我就是适配器模式,你们可能不是很熟悉,那么说到Adapter你们应该不陌生吧。闲话就不说了,先说下我的定义吧:Convert the interface of a class into another interface clients expect.Adapter lets classes work togther that couldn't otherwise because of incompatible interfaces.意思就是说:将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
我的通用类图如下:

类图中的各个图的解释我就不多说了。其实在生活中我还是无处不在的,比如说电源适配器,使电源电压变化,说白了,我就是把一个接口或者类转换成其他的接口或类。
适配器模式之自我分析
首先分析一下缺点:
- 使得重定义Adaptee的行为比较困难,若想重定义需要生成Adaptee的子类,然后用Adapter引用其子类。
优点如下:
- Adapter可以重定义Adaptee的部分行为。
- 允许Adapter与多个Adaptee一起工作。
- 可以让两个没有任何关系的类在一起运行。
- 增加了子类的透明性。
- 提高了类的复用度。
- 灵活性比较好。想用就用,想删就删。
适配器模式之实现
No code,no truth。说的再好,也不如代码管用,所以我就实现一个通用代码。
首先是一个目标接口的代码:
public interface Target{
//目标角色自己的方法
public void request();
}
然后是目标角色的实现方法:
public class ConcreteTarget implements Target{
public void request(){
System.out.println("Nothing is important.");
}
}
接下来是Adaptee的实现类,代码也会很少:
public class Adaptee{
//原有业务逻辑
public void doSth(){
System.out.println("I want to eat delicious snacks");
}
}
上面就是需要适配的类,在这里的方法什么的就不再多写了。接下来就是重中之重的适配器类的实现了:
public class Adapter extends Adaptee implements Target{
public void request(){
super.doSth();
}
}
它继承自Adaptee,同时是Target的接口实现,这样一来就将Adaptee和Target联系起来了,最后是测试用的类:
public class Client{
public static void main(String[] args) {
//原有业务处理
Target target = new ConcreteTarget();
target.request();
//现在增加了适配器角色之后的业务逻辑
Target target2 = new Adapter();
target2.request();
}
}
至此,我的实现就此完成了。
适配器模式之应用场景
怎么样,相信我就是适配器了吧,你们竟然装作不认识我的样子,作者道:赶紧接着讲啊,讲完再说,大家都等着呢。好吧,鱼哥催了,接下来就是应用场景了:
- 你若想使用一个已经存在的类,而它的接口又不符合你的要求时,适配器模式走起。
- 若你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作时,适配器模式等着你。
- 当你想使用一些已经存在的子类,但是不可能对每一个都进行子类化时,适配器模式欢迎你。
好了,That's all。荆轲刺秦王,设计模式手中藏。(此时抽象工厂妹纸将镜子拿出递给适配器模式,只听一声尖叫传来:有鬼啊~~~)
PS:本博客欢迎转发,但请注明博客地址及作者~
博客地址:http://www.cnblogs.com/voidy/
博客新址:http://voidy.net
<。)#)))≦
设计模式之第15章-适配器模式(Java实现)的更多相关文章
- 设计模式之第18章-观察者模式(Java实现)
设计模式之第18章-观察者模式(Java实现) 话说曾小贤,也就是陈赫这些天有些火,那么这些明星最怕的,同样最喜欢的是什么呢?没错,就是狗仔队.英文的名字比较有意思,是paparazzo,这一说法据说 ...
- 设计模式之第4章-装饰模式(Java实现)
设计模式之第4章-装饰模式(Java实现) “怎么了,鱼哥?” “唉,别提了,网购了一件衣服,结果发现和商家描述的差太多了,有色差就算了,质量还不好,质量不好就算了,竟然大小也不行,说好的3个X,邮的 ...
- 设计模式之第0章-单例模式(Java实现)
设计模式之第0章-单例模式(Java实现) 当当当当~首先有请最简单的单例模式登场,先来个自我介绍吧 单例模式之自我介绍 我,单例模式(Singleton Pattern)是一个比较简单的模式,我的定 ...
- 设计模式之第3章-模板方法模式(Java实现)
设计模式之第3章-模板方法模式(Java实现) "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场) ...
- 设计模式之第2章-抽象工厂模式(Java实现)
设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...
- 设计模式之第1章-工厂方法模式(Java实现)
设计模式之第1章-工厂方法模式(Java实现) “我先来”,“不,老公,我先!”.远远的就听到几个人,哦不,是工厂方法模式和抽象工厂模式俩小夫妻在争吵,尼妹,又不是吃东西,谁先来不都一样(吃货的世界~ ...
- Java 设计模式系列(六)适配器模式
Java 设计模式系列(六)适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的结构: 类的适配器模式 对象 ...
- 设计模式之第7章-外观模式(Java实现)
设计模式之第7章-外观模式(Java实现) “鱼哥,知道怎么把大象装进冰箱里面么?”(作者按:这么简单的问题还想考我,早了几百年吧.)“把大象装进冰箱里,一共需要三步:第一步,把冰箱门打开:第二步,把 ...
- 设计模式之第22章-组合模式(Java实现)
设计模式之第22章-组合模式(Java实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...
随机推荐
- mui的ajax例子1
mui.ajax()方法,get请求 前端页面: <!DOCTYPE html><html><head> <meta charset="utf-8& ...
- Jquery删除table里面checkbox选中的多个行
自己闲来无聊,写了一篇关于jq选中复选框删除数据的一个功能,不足之处,还望多多包涵 js代码 <script type="text/javascript" src=" ...
- CentOS下内核TCP参数优化配置详解
主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(Max Segment LifeTime)时间,这个是TCP/IP必不可少的. TCP/IP的设计者如此设计,主要原 ...
- python any all函数
a = [0, 0, 0, 0] b = [0, 0, 0, 1] c = [1, 1, 1, 1] >>> any(a) False >>> any(b) Tru ...
- JavaScript基础:(加号,数值转换,布尔转换)
JavaScript中加号运算符"+" 运算过程理解 1) 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始值.日期对象通过toString()方法执行转换, ...
- ASP.NET的三种开发模式
前言 ASP.NET 是一个免费的Web开发框架,是由微软在.NET Framework框架中所提供的,或者说ASP.NET是开发Web应用程序的类库,封装在System.Web.dll 文件中.AS ...
- 机器学习-octave使用
1 == 2 % false 1 ~=2 % true % 隐藏版本,只显示>> . PS1('>> '); % 输出两位小数格式 disp(sprintf('2 ...
- 这些年,在wp平台打拼的日子
最近经常胃疼,在当地的镇医院看了几次都没有改善,只好去市医院照胃镜检查,发现有胃炎,虽然是很普通和常见的毛病,但这种毛病一但沾上,就很难根治,一喝酒或者吃饭不定时.熬夜.吃酸辣冷冻等食物都容易引起复发 ...
- SCSI add-single-device and remove-single-device
众所周知,SATA和SCSI是支持热插拔的,但是新装了这类支持热插拔的驱动器,系统不会马上识别的,往往我们需要重启系统来识别,但是有另外一种方法可以很方面的让系统识别新的设备. 作为系统管理员,需要了 ...
- ASP.NET补充
字典类的子集 using System.Collections.Generic; Dictionary<string, string> dicB = new Dictionary<s ...