设计模式之十 适配器模式
来源:互联网 发布:淘宝店铺品牌怎么申请 编辑:程序博客网 时间:2024/04/28 12:53
大家好,今天让我扯扯适配器模式吧
我们先看看适配器的概念:
百度百科上的介绍 适配器就是一个接口转化器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口.
那么从这个概念我们可以看出,适配器就是一个用来转化的东西。
比如说,中国电压标准是220V。而我们的电脑电源电压一般是19V(我的电脑是是20V).很明显,220V的电压给19V的电源,如果不经过处理的话,我们的电源估计就会报废了。那么怎么做的呢?答案就是一个适配器。我们的电源适配器帮我们做了转化,使得220V的电源可以给我们19V的电脑电源用。
简单理解就是 适配器进行了信息转化
在软件开发的过程中,我们经常会用遇到这种情况。
我们通过接口来访问类提供的服务,但是往往有一些现有的类已经能够完成这个服务了,只是它的接口不一定是我们所希望的,在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。
好了,看看经典的2个适配器模式的图吧
首先是类适配器
接着是对象适配器
这两个的差别可以从UML图中看出来了
其中
Target:就是我们定义好的接口
Adaptee:就是现有的API函数,也就是需要适配的接口
Adapter:适配器类,把Adaptee转换成Target
那么我们贴个代码吧
假设有这么一个背景:
我们现在找到了一个可以剪切图片的工具类,而我们之前也定义了一个操作类接口,那么怎么复用呢?请看代码
我们讲的是类适配器,对象适配器也是类似的(就是在adapter中内置一个apateee的引用,并且让adapter继承了Target,在adapter重写方法)
package edu.fjnu.cs.hwb.adapter;public interface Operation{ void cutImage();}
package edu.fjnu.cs.hwb.adapter;public class ImageOperationAdaptee{public void shearImage(){System.out.println("ImageOperation's shearImage()");}}
package edu.fjnu.cs.hwb.adapter;public class ImageOperationAdapter extends ImageOperationAdaptee implements Operation{@Overridepublic void cutImage(){// TODO Auto-generated method stubshearImage();}}
package edu.fjnu.cs.hwb.adapter;public class Client{public static void main(String[] args){Operation operation = new ImageOperationAdapter();operation.cutImage();}}
结果:
我之前上课问了老师,为什么对象适配器中要用继承,而不能用实现.老师跟我说:“这个东西有一个数学模型,验证后是用继承更好.我之前看过这个论文”..
楼主果断弱爆了..
- 设计模式之十 适配器模式
- C++设计模式之十--Adapter适配器模式
- 设计模式(十)适配器模式
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器
- 设计模式 之 适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式之适配器
- 设计模式 之 适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- 设计模式之适配器模式
- Equalizer 分布式渲染 在一同一台电脑启动多窗口
- Google上淘的一个ymodem的c实现
- UNIX study note(step1)
- LoadRunner问题汇总
- SEO学习笔记五(SEO实战密码读书笔记)
- 设计模式之十 适配器模式
- STM32串行通信USART讲解笔记
- 学习python(7)冒泡与递归
- IOS传值-属性传值
- asp编程:召开自己的新闻发布会
- 在cmd中使用regasm命令
- 取出一个字节(byte)中的每一位(bit)
- NanoHttpd 专门为嵌入java应用设计的轻型HTTP服务器
- ASP中使用Office2000中的图表控件