java模式之---------适配器模式
适配器:将不可行的转换为可行的,比如将别人的女朋友转换为你的女朋友;将别人钱转换为你的钱;将美国的功率转为中国的功率;将不可用的接口转换为可用的接口,诸如此类的,都可称之为适配器。
OK。进入正题。。。。。。。。。。。
在JDK的GUI中,闻名的鼠标监听器就用了适配器的模式,以及等其它的。
把一个类的接口变换成所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.
适配分为:类适配器与对象适配器,前者是使用继承,后者则是持有引有。那么两者有什么区别呢?在实际的项目中应该优先于哪一种呢?请看下文。
首先以实例来说明,在美国标准插座为60HZ,而在天朝准插座为50HZ,那么现在我们需要用美国的插座了,不能直接使用,那么怎以办呢?则需要一个适配器来为我们的转换的工作,将60HZ转换为50HZ的。OK。明白了么?来看代码吧。
一、类适配器
package com.stiven.adapter.classadapter;/** * 实际需要的接口是50HZ的 * * @author 063 * @version N/A */public interface Target{ public void get50HZ_CH();}
/** * 需要转换的接口,我们称之为被适配者 * * @author 063 * @version N/A */public class SocketAdaptee{ public void get60HZ_US() { System.out.println("美国标准插座"); }}
/** * 适配者,想当于一个转换器 * * @author 063 * @version N/A */public class SocketAdapter extends SocketAdaptee implements Target{ @Override public void get50HZ_CH() { this.get60HZ_US(); System.out.println("通过转换后....我们可以使用天朝的插座了..."); } }
public class Client{ public static void main(String[] args) { Target target = new SocketAdapter(); target.get50HZ_CH(); }}
/** * 对象适配器,实现接口并持有被适配者的引用 * * @author 063 * @version N/A */public class ObjectAdater implements Target{ /** * 被适配者的引用,通常称之为需要转换的对象 */ private SocketAdaptee socketAdaptee; public ObjectAdater(SocketAdaptee socketAdaptee) { this.socketAdaptee = socketAdaptee; } @Override public void get50HZ_CH() { socketAdaptee.get60HZ_US(); System.out.println("通过转换后....我们可以使用天朝的插座了..."); } }
public class Client{ public static void main(String[] args) { SocketAdaptee socketAdaptee = new SocketAdaptee(); ObjectAdater objectAdater = new ObjectAdater(socketAdaptee); objectAdater.get50HZ_CH(); } }