`

【转】设计模式——适配器模式(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)

    在阅读文章《设计模式——适配器模式(adapter)》时,你可以期待了解到更多关于适配器模式的实战案例、优缺点分析以及如何在实际项目中有效利用这一模式来解决问题。同时,提供的`adapter`压缩包文件可能包含示例...

    设计模式——适配器模式

    通过阅读博客文章《设计模式——适配器模式》(链接:https://wjy320.iteye.com/blog/2042323),我们可以深入了解适配器模式的实现细节,包括具体的代码示例以及在实际项目中的应用案例。这个博客可能会讨论如何在...

    浅析Java设计模式【2】——适配器

    ### 浅析Java设计模式【2】——适配器 #### 概念解析 适配器模式是一种常用的设计模式,其核心在于“适配”二字,即如何将一个类的接口转换成客户希望的另一个接口。该模式使得原本由于接口不兼容而不能一起工作的...

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...

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

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

    设计模式实验报告-适配器模式.docx

    ### 设计模式实验报告——适配器模式 #### 一、引言 设计模式是一种在特定情境下解决软件设计问题的通用解决方案。它为解决常见问题提供了一种可复用的设计思路,帮助开发者构建出更加灵活、易于维护的系统。在...

    设计模式——可复用面向对象软件的基础(1)

    在《设计模式——可复用面向对象软件的基础》这本书中,作者Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称GoF)首次提出了23种面向对象设计模式。这些模式涵盖了不同设计场景,如创建型模式、...

    C++设计模式课件16_Adapter_适配器.pdf

    ### 设计模式——适配器模式(Adapter Pattern) 在软件工程领域中,设计模式是一种用于解决常见问题的标准化方法。这些模式提供了一种系统化的解决方案,帮助开发人员编写出更易于理解、维护和扩展的代码。适配器...

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

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

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    设计模式适配器模式讲解

    适配器模式(Adapter Pattern)是一种常用的软件设计模式,它属于结构型模式的一种。该模式的主要目的是解决不同接口之间的兼容性问题,使原本由于接口不一致而不能一起工作的类能够协同工作。适配器模式的核心思想...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的...

    23种 设计模式---面向对象的基本原则

    - 适配器模式(Adapter):将两个不兼容的接口转换为兼容的接口,使得原本因接口不兼容而不能一起工作的类可以协同工作。 - 桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - 组合...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

    设计模式与泡MM——设计模式入门教程

    ### 设计模式与泡MM——设计模式入门教程 #### 一、创建型模式 ##### 1、FACTORY(工厂模式) 工厂模式的核心在于定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂模式让类的实例化延迟到子类中...

    设计模式代码——c#

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

    c#代码介绍23种设计模式-07适配器模式(附代码)

    解决这个问题的办法就是我们本文要介绍的适配器模式——使得新环境中不需要去重复实现已经存在了的实现而很好地把现有对象(指原来环境中的现有对象)加入到新环境来使用。 2. 类的适配器模式实现...

Global site tag (gtag.js) - Google Analytics