设计模式之第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实现) “鱼哥,有没有什么模式是用来处理树形的“部分与整体”的层次结构的啊.”“当然”“没有?”“有啊.别急,一会人就到了.” 组合模式之自我介绍 “请问你是?怎 ...
随机推荐
- 工控图表控件ProEssentials创建3D柱状图示例代码
使用ProEssentials可以创建3D柱状图,柱状图的形式包括线框.实体和阴影. 类似于Graph control,3D柱状图只需要YData. Subsets定义沿z轴有多少行,Points定义 ...
- C#开发android应用实战 源码
原书名: Professional Android Programming with Mono for Android and .NET/C# Download Title Size Down ...
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:11.定制化Log输出
欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 在<迷你微信>服务器中,我们用了Log4J来进行输出,这可以在我们程序出现异常的时候找到错误发生时 ...
- safenet 超级狗 加密狗
1.CS程序可以工作正常: 2.BS程序,服务器验证狗,IIS设置32位兼容方法1: dog.SetLibPath,设置查找依赖dll路径: 方法2:默认系统目录 C:\Windows\SysWOW6 ...
- git简易使用指南
git简易使用指南 Git是一个分布式版本控制/软件配置管理软件,原是Linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为更好地管理Linux内核开发而设计.应注意的是,这与GNU I ...
- windows 7 X64 提示“com surrogate 已停止工作”的解决方案
C:\Windows\SysWOW64\dllhost.exe 把以上文件添加至“数据执行保护”.
- linux 命令——33 df(转)
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- 【BZOJ1076】[SCOI2008] 奖励关(状压DP)
点此看题面 大致题意:总共有\(n\)个宝物和\(k\)个回合,每个回合系统将随机抛出一个宝物(抛出每个宝物的概率皆为\(1/n\)),吃掉一个宝物可以获得一定的积分(积分可能为负),而吃掉某个宝物有 ...
- 启动tomcat的Cannot find ./catalina.sh 的问题
从终端进入tomcat的bin目录,然后执行startup.sh Cannot find bin/catalina.sh The file is absent or does not have exe ...
- 基于纹理内存的CUDA热传导模拟
原文链接 项目中有三个,第一个是全局内存,其余两个分别是基于1d和2d纹理内存.项目打包下载. 纹理内存是只读内存,与常量内存相同的是,纹理内存也缓存在芯片中,因此某些情况下,它能减少对内存的请求并提 ...