首页 > 其他分享 >(十五)适配器模式

(十五)适配器模式

时间:2022-12-01 17:35:00浏览次数:42  
标签:中锋 name 适配器 模式 public Player 十五 void String

1 概述

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

在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如在需要对早期代码复用一些功能等应用上很有实际价值。

  • 想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不相同时,就应该考虑用适配器模式。

  • 要在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同时就使用它。

2 示例

通过翻译“适配”球员,使外籍球员能听懂命令。

球员类

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 jingGong() {
        System.out.println("外籍中锋 " + name + " 进攻");
    }

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

翻译者类

public class Translator extends Player {
    // 声明并实例化一个内部"外籍中锋"对象,
    // 表明翻译者与外籍球员有关联
    private ForeignCenter foreignCenter = new ForeignCenter();

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

    @Override
    public void attack() {
        foreignCenter.jingGong();
    }

    @Override
    public void defense() {
        foreignCenter.fangShou();
    }
}

客户端代码

public class Client {
    public static void main(String[] args) {
        Player b = new Forwards("巴蒂尔");
        b.attack();
        Player m = new Guards("麦克格雷迪");
        m.attack();
        Player ym = new Translator("姚明");
        // 翻译者告诉姚明,教练要求你既要"进攻"又要"防守"
        ym.attack();
        ym.defense();
    }
}

输出入下

前锋 巴蒂尔 进攻
后卫 麦克格雷迪 进攻
外籍中锋 姚明 进攻
外籍中锋 姚明 防守

Process finished with exit code 0

参考书籍:
《大话设计模式》

标签:中锋,name,适配器,模式,public,Player,十五,void,String
From: https://www.cnblogs.com/dalelee/p/16941888.html

相关文章

  • Java设计模式面试题及答案(2023)
    Java面试题及答案(2023版),每道都是认真筛选出的高频面试题,助力大家能找到满意的工作!Java设计模式面试题及答案下载链接:全部面试题及答案PDF其他互联网大厂面试题1:阿里......
  • C#的switch的用法及模式匹配
    switch-case语句经常被认为是if-else语句的替代品,但是在众多程序语言中还是能见到switch的存在,这很大程度上是因为switch更实用,这一点在C#中更能提现。简单的语......
  • 设计模式
    设计模式的七大原则单一原则对类来说,即一个类应该只负责一个职责。如果类A负责两个不同的职责:职责1、职责2,当职责1需求变更而改变类A时,可能造成职责2执行错误,所以需要将......
  • 单例模式的双重检测
    https://www.cnblogs.com/tangZH/p/10031337.htmlpublicclassSingletonClass{privatevolatilestaticSingletonClassinstance=null;publicstaticSingl......
  • axios的config模式 工作中最常使用的一种方法
    axios的config模式工作中最常使用 语法:axios({}).then({}).catch({})(这里的语法不同之前的axios.('url地址').then({}).catch({)})<body><h2>axios的config模式......
  • IOS的delegate 设计模式,用法及利于其编写列表 UITableView(具体编写)
    delegate设计模式,用法及利于其编写列表UITableView(具体编写)在app中必须用到的设计模式,也是最常用的UITanView视图展示,协助管理,不管数据。简单列表编写self.view.backg......
  • 一篇文章让你彻底搞懂单例设计模式
    转自:​​单例设计模式-全网最牛文章​​下文是笔者编写的单例模式实现的八种方式,如下所示:单例模式的简介我们将一个类在当前进程中只有一个实例的这种模式,称之为“单例模式......
  • 设计模式-六大设计原则
    1单一职责原则(SingleResponsibilityPrinciple)2开闭原则(Open-ClosedPrinciple)3里氏代换原则(LiskovSubstitutionPrinciple)4依赖倒置原则(DependenceInversio......
  • 设计模式-23种设计模式
    1创建型1单例模式(SingletonPattern)2工厂模式(FactoryPattern)3抽象工厂模式(AbstractFactoryPattern)4建造者模式(BuilderPattern)5原型模式(PrototypePattern)......
  • 云平台的安全设计技术和模式
    云平台的安全设计不仅要能够满足共性安全需求,还应能够兼顾各用户的动态、特定安全需求。为满足需求,需设计安全资源池方案。安全资源池是将云计算技术应用于安全领域,通过将安......