设计模式随笔之适配器模式(Adapter)
来源:互联网 发布:手机脚本软件 编辑:程序博客网 时间:2024/04/30 01:21
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。
01、类的适配器模式
核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter类,将Source的功能扩展到Targetable里.
思路:Adapter类继承Source类,实现Targetable接口。
public class Source { public void method1() { System.out.println("this is original method!"); } }
public interface Targetable { /* 与原类中的方法相同 */ public void method1(); /* 新类的方法 */ public void method2(); }
public class Adapter extends Source implements Targetable { @Override public void method2() { System.out.println("this is the targetable method!"); } }
public class AdapterTest { public static void main(String[] args) { Targetable target = new Adapter(); target.method1(); target.method2(); } }
输出:
this is original method!
this is the targetable method!
这样Targetable接口的实现类就具有了Source类的功能。
02、对象的适配器模式
基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题
public class Wrapper implements Targetable { private Source source; public Wrapper(Source source){ super(); this.source = source; } @Override public void method2() { System.out.println("this is the targetable method!"); } @Override public void method1() { source.method1(); } }
public class AdapterTest { public static void main(String[] args) { Source source = new Source(); Targetable target = new Wrapper(source); target.method1(); target.method2(); } }
03、接口的适配器模式
有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所 有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的 方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。
public interface Sourceable { public void method1(); public void method2(); }
public abstract class Wrapper implements Sourceable{ public void method1(){} public void method2(){} }
实现类:
public class SourceSub1 extends Wrapper { public void method1(){ System.out.println("the sourceable interface's first Sub1!"); } }
public class SourceSub2 extends Wrapper { public void method2(){ System.out.println("the sourceable interface's second Sub2!"); } }
测试方法:
public class WrapperTest { public static void main(String[] args) { Sourceable source1 = new SourceSub1(); Sourceable source2 = new SourceSub2(); source1.method1(); source1.method2(); source2.method1(); source2.method2(); } }
the sourceable interface's first Sub1!
the sourceable interface's second Sub2
0 0
- 设计模式随笔之适配器模式(Adapter)
- 设计模式之适配器-Adapter--适配器模式
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- 设计模式之Adapter(适配器)
- java中的阻塞线程
- 您的设计模式——建造者模式【Builder Pattern】
- C++建模实战1-高考录取系统(7)
- PHP中的正则表达式的优化
- LeetCode | 167. Two Sum II
- 设计模式随笔之适配器模式(Adapter)
- 积分系统文件上传之FormData对象
- Codeforces Beta Round #9 (Div. 2 Only) D. How many trees? dp
- hive中内部表和外部表的区别
- NSNotification、KVO、Delegate的同步和异步问题
- Android系统编程思想篇:建造者模式
- .NET 中的委托
- PAT
- iOS UDID UUID 广告标识符的区别