jdk中io流InputStreamReader/OutputStreamWriter就运用了适配器模式,
其目的就是为了把字节流接口转换成字符流接口来使用。
写这篇文章使我搞清楚了 代理模式(Proxy)、装饰模式(Decorator)、适配器模式(Adapter)之间的区别,其实写技术文章是个好习惯,虽然有些东西已经懂了但是写着写着又会有一些新的东东产生。希望刚入行的自己能把这个写技术文章的习惯坚持下去。
下面是对该模式的简单理解:
package design.adapter2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午09:31:06 <br>
*
*/
public class Test {
public static void main(String[] args) {
/*
* 以前充的是220V的电压,后来换成110V的电压,所以需要中间加个适配器
* VAdapter220To110的作用就是把V220这个接口转换成V110接口
*
* 适配器模式(Adapter):
* 1、类适配器:看起来和代理模式(Proxy)很相似,适配器类和被适配器类都拥有共同的接口,并且适配器类继承被适配类。
*
* 2、对象适配器:把被适配的类做为适配器的属性,然后可以很方便的调用被适配对象的方法,
* 其实这也可以看成是静态代理中聚合了被代理类的引用,之前类适配器是继承被适配类的,现在
* 不用继承了,为什么呢?因为某些情况下聚合反而比继承要好,比如2个类不存在明显的层级关系,
* 如果用继承就不合理了,但是用聚合就非常好,如果两个类存在明显的层级关系却用聚合反而显得不好。
*
* 所以适配器模式看起来和代理模式很相似,
* 代理模式、装饰模式、适配器模式这3个模式看起都相似,
* 相同点:都起到了对被代理/被装饰/被适配 对象的功能上的扩充和访问。
* 区别:
* 代理模式主要是以控制被代理类为主,
* 装饰模式主要是以扩充被装饰类的功能为主,
* 适配器模式主要是以对被适配类的转换为主,比如io流中InputStreamReader/OutputStreamWriter
* 就是JDK中适配器模式的运用,主要是把字节流转换为字符流。
*
* 这3中模式的基本结构是相似甚至是相同的,紧紧是逻辑存在差异,然而GOF却把他们各取一个名字我在想是不是显得有些多余
* 甚至是把问题搞复杂了,但有一点可以肯定就是名字区分了其功能。
* 比如代理模式,确实是做为一个代理而存在的;
* 装饰模式,确实是作为一个装饰而存在的;
* 适配器模式很容易就让人想到了充电用的适配器。
* 这么说来又确实有必要用3种不同的名字加以区分,在不同的场合下因为各自所起的作用不同,那么名字也就不一样了。
*/
V110 v110 = new VAdapter220To110(new V220Impl());
v110.powerV110();
}
}
package design.adapter2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午09:33:47 <br>
*/
public abstract class V220 {
public abstract int powerV220();
}
package design.adapter2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午09:41:51 <br>
*/
public abstract class V110 {
public abstract int powerV110();
}
package design.adapter2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午09:50:20 <br>
*
*/
public class V220Impl extends V220 {
@Override
public int powerV220() {
System.out.println("v220");
return 220;
}
}
package design.adapter2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午09:34:18 <br>
* 适配器类,负责把V220这个接口转换成V110接口
*/
public class VAdapter220To110 extends V110 {
private V220 v220;
//任何V220接口的实现类都可以丢进来,以便V220和V110接口可以相互工作
public VAdapter220To110(V220 v220) {
this.v220 = v220;
}
@Override
public int powerV110() {
int v = this.v220.powerV220();
System.out.println("经过适配器,220V转换成110V");
return 110;
}
}
- 大小: 81.7 KB
分享到:
相关推荐
### 设计模式——适配器模式(Adapter Pattern) 在软件工程领域中,设计模式是一种用于解决常见问题的标准化方法。这些模式提供了一种系统化的解决方案,帮助开发人员编写出更易于理解、维护和扩展的代码。适配器...
适配器模式(Adapter Pattern)是一种结构型设计模式,它主要解决的是接口不兼容的问题,使得原本由于接口差异无法一起工作的类能够协同工作。在PHP中,适配器模式通过创建一个包装类(适配器类)来转换不兼容的接口...
适配器模式(Adapter Pattern)是通过创建一个新的对象(适配器),这个对象将原本不兼容的对象接口转换为客户端期望的接口,从而使两者能够协同工作。适配器模式可以分为类适配器和对象适配器两种类型。 1. 类...
适配器模式是软件设计模式中的一种,它的主要目的是解决接口不兼容问题,使得原本由于接口差异无法协同工作的类能够协同工作。在实际的软件开发过程中,我们常常遇到这样的情况:旧有的系统或第三方库提供了丰富的...
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类一起工作。在C++中,适配器模式通常通过创建一个适配器类来实现,该类将不兼容的接口转换为兼容的接口。 压缩包文件代码是一个简单的C++...
适配器模式(Adapter Pattern)的主要目的是将两个不兼容的接口融合在一起,使得原本不能协同工作的类能够一起工作。这种模式通常在我们需要使用一个已有类,但其接口不符合我们的需求时使用。适配器模式包含三个...
**定义**:适配器模式(Adapter Pattern)是一种结构型设计模式,允许不兼容的接口协同工作。该模式涉及到一个包含现有类的接口转换到客户端希望使用的另一个接口的对象。适配器模式使得原本由于接口不兼容而不能一起...
Java设计模式中的适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目的是将不兼容的接口转换为用户期望的接口,使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式有两种形式:类适配器...
在某些情况下,适配器模式可能会被滥用,例如当一个简单的直接的方法可以解决问题时,开发者可能会不必要地引入一个复杂的适配器类。 根据提供的文件内容,其中包含了对适配器模式的简单描述和一些代码片段。这些...
下面是一个简单的适配器模式示例代码: ```java // 源接口 public class Adaptee { public void specificRequest() { System.out.println("Adaptee's specific request"); } } // 目标接口 public interface ...
以下是一个简单的类适配器模式示例: ```java // 目标接口 public interface Target { void request(); } // 适配者类 public class Adaptee { public void specificRequest() { System.out.println("Adaptee's...
本压缩包“listview适配器 ListViewAdapter和ViewHolder代码.rar”提供了一个简单的使用示例,帮助开发者理解和应用这两个概念。 ListViewAdapter是Android中一个专门用于ListView的适配器类,它充当了数据源和...
**适配器模式(Adapter Pattern)** 是一种结构型设计模式,它允许不兼容的接口之间能够协同工作。适配器模式的主要作用是通过创建一个新的适配器类来包装现有类的接口,使其满足客户端的接口需求。 ##### 实现案例:...
以下是一个简单的C#适配器模式的示例: ```csharp // 目标接口 public interface ICompatibleInterface { void NewMethod(); } // 适配者类 public class OriginalClass { public void OldMethod() { // 原始...
以下是一个简单的对象适配器模式的例子: ```java // 目标接口 public interface Target { void request(); } // 适配者类 public class Adaptee { public void specificRequest() { System.out.println(...
下面是一个简单的C#适配器模式的例子: ```csharp // 目标接口,客户期望的接口 public interface ITarget { void Operation(); } // 被适配的类,其接口与ITarget不兼容 public class Adaptee { public void ...
适配器模式(Adapter模式)是软件设计模式中的一种,其主要目的是为了使得不兼容的接口之间能够进行通信。在JavaScript中,适配器模式通常用于解决不同对象或类之间的接口不匹配问题,使得原本无法协作的对象能够...
### Android UI_常用组件之 Spinner与适配器模式 在Android开发中,用户界面(UI)的设计至关重要,良好的UI设计能够显著提升用户体验。本篇文章将详细介绍Android UI中的一个常用组件——`Spinner`及其与适配器模式...