设计模式之适配器模式

目录

1.概念:

​2.适配器模式结构图

3.练习的例子

4.练习的代码结构图 

5.总结 


1.概念:

使一个类的接口转变为客户希望的另外一个接口,该模式使得那些原本因为接口不兼容而不能一起工作的类可以一起工作

理解:被适配的类的方法名和客户类的方法名不同但是其作用是一样的,也就是其方法干的活是相同或相似的,适配类的方法名和客户类相同(继承了客户类),且拿到了被适配类的引用,表面上是适配类在干活实际上是被适配的类在干活

2.适配器模式结构图

3.练习的例子

抽象运动员类:

/**
 * 抽象运动员类
 */
@Data
abstract class Player {
    private String name;

    public Player(String name){
        this.name = name;
    }
//进攻
    abstract void attack();
    //防守
    abstract void defense();
}

前锋类:

/**
 * 前锋类
 */
public class Forwards extends Player{

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

    @Override
    void attack() {
        System.out.println(getName() + "前锋进攻");
    }

    @Override
    void defense() {
        System.out.println(getName() + "前锋防守");
    }
}

后卫类:

/**
 * 后卫类
 */
public class guards extends Player{

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

    @Override
    void attack() {
        System.out.println(getName() + "后卫进攻");
    }

    @Override
    void defense() {
        System.out.println(getName() + "后卫防守");
    }
}

外籍中锋类:

/**
 * 外籍中锋
 */
@Data
public class ForeignCenter {
    private String name;

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

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

翻译者(适配类):

/**
 * 翻译者来适配外籍中锋
 */
public class Translator extends Player{
    //拿到外籍中锋的引用
    private ForeignCenter foreignCenter = new ForeignCenter();

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

    @Override
    void attack() {
        foreignCenter.进攻();
    }

    @Override
    void defense() {
        foreignCenter.防守();
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
         Player guards = new guards("麦克");
         Player forwards = new Forwards("凯蒂");
         Player translator = new Translator("姚明");

        guards.attack();
        forwards.attack();
        translator.attack();
        translator.defense();

    }
}

控制台:

4.练习的代码结构图 

5.总结 

何时使用:想使用一个已经存在的类,但如果它的接口,也就是它的方法和要求类的接口(方法)不相同时,而且该类的接口和要求类的接口做的事应该是相同或相似的,此时应该考虑用适配器模式。

好处:客户代码可以统一调用同一接口,这样可以更简单、更直接、更紧凑。

注意:类和方法的命名应该有规范,最好前期就设计好,接口不相同时,首先不应该考虑用适配器,而是应该考虑通过重构统一接口,要在双方都不太容易修改的时候再使用适配器模式适配,而不是一有不同时就使用。
 


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值