设计模式之适配器模式

  1. 简单梳理适配器模式
    1. 适配器模式实现
      1. 定义业务方法
      2. 执行结果
      3. 结果分析
  2. 联系作者
    1. 微信公众号
    2. QQ群

简单梳理适配器模式

适配器模式实现

我们看篮球的时候,经常看到前锋中锋后卫针对球场形式进行进攻或防守。

但是对于需要翻译的外籍球员,就需要配备一个翻译员才能听懂教练的战术。

我们看下这个场景下,用适配器模式如何实现。

首先我们定义基本类,球员基类。

public abstract class Player {
    protected String name;

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

    public abstract void Attack();
    public abstract void Defense();
}

定义对应的前锋、中锋、后卫类

前锋

public class Forwards extends Player{
    public Forwards(String name) {
        super(name);
    }

    @Override
    public void Attack() {
        System.out.println("前锋("+name+")进攻");
    }

    @Override
    public void Defense() {
        System.out.println("前锋("+name+")防守");
    }
}

中锋

public class Center extends Player{
    public Center(String name) {
        super(name);
    }

    @Override
    public void Attack() {
        System.out.println("中锋("+name+")进攻");
    }

    @Override
    public void Defense() {
        System.out.println("中锋("+name+")防守");
    }
}

后卫

public class Guards extends Player{
    public Guards(String name) {
        super(name);
    }

    @Override
    public void Attack() {
        System.out.println("后卫("+name+")进攻");
    }

    @Override
    public void Defense() {
        System.out.println("后卫("+name+")防守");
    }
}

外籍中锋

public class ForeignCenter {
    private String name;

    public String getName() {
        return name;
    }

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

    public void Attack() {
        System.out.println("外籍中锋("+name+")进攻");
    }

    public void Defense() {
        System.out.println("外籍中锋("+name+")防守");
    }
}

再为外籍中锋配备一个翻译类,同样继承自Player基类

public class Translator extends Player{
    private ForeignCenter wjzf = new ForeignCenter();

    public Translator(String name) {
        super(name);
        wjzf.setName(name);
    }

    @Override
    public void Attack() {
        wjzf.Attack();
    }

    @Override
    public void Defense() {
        wjzf.Defense();
    }
}

这样我们前期的定义就算做完了,
然后我们看具体应用中的使用。

定义业务方法

看在具体业务逻辑中如何使用

public class AdapterTest {
    public static void main(String[] args) {
        //适配器模式
        func1();
    }

    public static void func1(){
        Player a = new Forwards("麦迪");
        a.Attack();

        Player b = new Center("乔丹");
        b.Attack();

        Player c = new Guards("艾弗森");
        c.Defense();

        Player d = new Translator("姚明");
        d.Attack();
        d.Defense();
    }
}

执行结果

前锋(麦迪)进攻
中锋(乔丹)进攻
后卫(艾弗森)防守
外籍中锋(姚明)进攻
外籍中锋(姚明)防守

结果分析

适配器模式,将一个类的接口,转换为客户想要的另一个类的接口。
适配器模式使得原本不兼容的接口可以一起工作。

那什么时候该考虑使用适配器模式呢?
在我们想使用一个已经存在的类,但由于接口也就是它的方法和你的要求不一致时,
就该考虑使用适配器模式了。

联系作者

微信公众号

xiaomingxiaola
(BossLiu)

QQ群

58726094


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 384276224@qq.com

×

喜欢就点赞,疼爱就打赏

日记本 网文世界