美文网首页JAVA设计模式
适配器模式——英语不好?找个翻译就行了

适配器模式——英语不好?找个翻译就行了

作者: 方才编程 | 来源:发表于2019-10-18 16:40 被阅读0次

一、基础简介

1、定义

一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2、使用场景

  • 1、系统需要使用现有的类,而此类的接口不符合系统的需要。
  • 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
  • 3、通过接口转换,将一个类插入另一个类系中。

3、优缺点

优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。

缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

4、适配器模式结构分析

  1. Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
  2. Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
  3. Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

二、代码实现

场景:将外国人说的话翻译成中文

1、Target(目标抽象类):目标抽象类定义客户所需接口

package com.mfc.design.适配器模式.实例;

/**
 * @author MouFangCai
 * @date 2019/10/18 15:48
 *
 * Target(目标抽象类):目标抽象类定义客户所需接口
 */
public abstract class Foreigner_Target {

    private String name;

    public Foreigner_Target(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void speak();
}

package com.mfc.design.适配器模式.实例;

/**
 * @author MouFangCai
 * @date 2019/10/18 15:52
 * 
 * 具体的目标类
 */
public class American extends Foreigner_Target {

    public American(String name) {
        super(name);
    }

    @Override
    public void speak() {
        System.out.println( getName() + ": This is an American");
    }
}

2、Adaptee(适配者类):适配者即被适配的角色

package com.mfc.design.适配器模式.实例;

/**
 * @author MouFangCai
 * @date 2019/10/18 16:01
 *
 * Adaptee(适配者类):适配者即被适配的角色
 */
public class Chinese_Adaptee {

    private String name;

    public Chinese_Adaptee(String name) {
        this.name = name;
    }

    public void 说话(){
        System.out.println( name + ": 这是一个美国人");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、Adapter(适配器类):作为一个转换器

package com.mfc.design.适配器模式.实例;

/**
 * @author MouFangCai
 * @date 2019/10/18 16:04
 *
 * Adapter(适配器类):作为一个转换器
 */
public class Translator_Adapter extends Foreigner_Target {

    private Chinese_Adaptee adaptee = new Chinese_Adaptee("中国人:");

    public Translator_Adapter(String name) {
        super(name);
        adaptee.setName(name);

    }

    // 翻译者将“Foreigner_Target”说的话,翻译为 中国人 说的话
    @Override
    public void speak() {
        adaptee.说话();
    }
}

4、客户端测试

package com.mfc.design.适配器模式.实例;

/**
 * @author MouFangCai
 * @date 2019/10/18 16:07
 */
public class Client_Adapter {

    public static void main(String[] args) {
        Foreigner_Target target = new American("American");
        target.speak();

        Foreigner_Target target1 = new Translator_Adapter("翻译官");
        target1.speak();

    }
}

5、结果

American: This is an American
翻译官: 这是一个美国人

Process finished with exit code 0

相关文章

  • 适配器模式——英语不好?找个翻译就行了

    一、基础简介 1、定义 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作...

  • 结构型-Adapter

    适配器模式的原理与实现 适配器模式 的英文翻译是 Adapter Design Pattern。顾名思义,这个模式...

  • 适配模式

    什么是适配器? 在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wra...

  • Java设计模式(二)

    talk is cheap show me the code 适配器模式 类适配器模式 接口适配器模式 对象适配器...

  • 适配器模式

    目录 1、什么是适配器模式? 2、适配器模式结构? 3、如何实现适配器模式? 4、适配器模式的特点? 5、适配器模...

  • 设计模式之适配器模式

    适配器模式: 类适配器模式、对象适配器模式、接口适配器模式 1.类适配器模式:新的接口出现了,但是和老的接口不兼容...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 第4章 结构型模式-适配器模式

    一、适配器模式简介 二、适配器模式的优点 三、适配器模式的实例

  • 设计模式(Design Patterns)适配器模式(Adapt

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 类的适配器模式 场景:将一个类转换成...

  • 适配器模式

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式将某个类的接口转换成客户端期...

网友评论

    本文标题:适配器模式——英语不好?找个翻译就行了

    本文链接:https://www.haomeiwen.com/subject/smfwmctx.html