`

【转】设计模式——适配器模式(Adapter)

 
阅读更多

适配器模式是其他结构型模式的起源。

 

 

    (1)适配器模式

 

 

           类的适配器模式

                 ↓

(2)装饰模式←对象的适配器模式→(5)桥接模式

  ↓               ↓            ↓

(3)代理模式  接口的适配器模式        (6)组合模式

↓                            ↓

(4)外观模式                (   7)享元模式

 

 

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。

 

 

6-1.类的适配器模式:

核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码:

◆Source类:

public class Source {

 

public void method1() {

System.out.println("this is original method!");

}

}

◆目标接口Targetable:

public interface Targetable {

 

/* 与原类中的方法相同 */

public void method1();

 

/* 新类的方法 */

public void method2();

}

◆Adapter类继承Source类,实现Targetable接口:

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类的功能。

 

 

6-2.对象的适配器模式:

基本思路和类的适配器模式相同,只是将Adapter类作修改,这次不继承Source类,而是持有Source类的实例,以达到解决兼容性的问题。

▼只需要修改Adapter类的源码即可:

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();

}

}

输出与第一种一样,只是适配的方法不同而已。

public interface Sourceable {

 

public void method1();

public void method2();

}

▲抽象类Wrapper2:

public abstract class Wrapper2 implements Sourceable{

 

public void method1(){}

public void method2(){}

}

▲两个实现类:

public class SourceSub1 extends Wrapper2 {

public void method1(){

System.out.println("the sourceable interface's first Sub1!");

}

}

public class SourceSub2 extends Wrapper2 {

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!

6-3.接口的适配器模式

有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费。

因为并不是所有的方法都是我们需要的,有时只需要某一些,此处为了解决这个问题,我们引入了接口的适配器模式。

借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系。

所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

▲接口:

 

 

讲了这么多,总结一下三种适配器模式的应用场景:

类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。

对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。

接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。

--------------------- 

作者:panzihao_beijing 

来源:CSDN 

原文:https://blog.csdn.net/PanZiHao_BeiJing/article/details/80416972 

版权声明:本文为博主原创文章,转载请附上博文链接!

分享到:
评论

相关推荐

    设计模式——适配器模式(adapter)

    NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1753041

    Adapter(适配器模式)

    走进设计模式之——适配器模式 (Adapter) 对应代码

    Python设计模式之适配器模式原理与用法详解

    设计模式——适配器模式 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口.Adapter Pattern使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景:系统数据和

    设计模式——JAVA.docx

    JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    design-pattern-java.pdf

    七个结构型模式 七个结构型模式 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(一) 不兼容结构的协调——适配器模式(二) 不兼容结构的协调——适配器模式(三) 不兼容结构的协调——适配器模式...

    深入浅出设计模式(中文版)

    4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...

    深入浅出设计模式(中文版电子版)

    4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 4.5FacadePattern(外观模式) 134 4.5.1定义 134 4.5.2...

    设计模式--可复用面向对象软件的基础

    4.1 ADAPTER(适配器)——对象结构型模式 4.2 BRIDGE(桥接)——对象结构型模式 4.3 COMPOSITE(组成)——对象结构型模式 4.4 DECORATOR(装饰)——对象结构型模式 4.5 FACADE(外观)——对象结构型模式 4.6 ...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    适配器模式(Adapter Pattern)桥接模式(Bridge Pattern)过滤器模式(Filter、Criteria Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Pattern)外观模式(Facade Pattern)享元模式(Flyweight ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    C#23种设计模式_示例源代码及PDF

    适配器模式: 从而使原本因接口原因不 适配器模式 把一个类的接口变换成客户端所期待的另一种接口, 匹配而无法一起工作的两个类能够一起工作。 适配类可以根据参数返还一个合适的实例给客 户端。 7、BRIDGE —...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    C#23种设计模式

    │ │ └─C#设计模式(6)——原型模式(Prototype Patt O技术博客_files │ └─PrototypePattern │ ├─bin │ │ └─Debug │ ├─obj │ │ └─Debug │ │ └─TempPE │ └─Properties ├─07.Adapter...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷2

    (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...

Global site tag (gtag.js) - Google Analytics