java适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

案例:

  • 定义机器接口和其具体实现的两个不同机器
/**
 * @author Gjing
 * 刷卡器
 **/
public interface CardMachine {
    /**
     * 刷身份证
     */
    void blushIdCard(String number);

    /**
     * 刷银行卡
     */
    void blushBankCard(String number);
}

/**
 * 身份证刷卡器
 */
class IdCardMachine implements CardMachine{

    @Override
    public void blushIdCard(String number) {
        System.out.println("身份证刷卡器执行刷卡,卡号:" + number);
    }

    @Override
    public void blushBankCard(String number) {

    }
}

/**
 * 银行卡刷卡器
 */
class BankCardMachine implements CardMachine {
    @Override
    public void blushIdCard(String number) {

    }

    @Override
    public void blushBankCard(String number) {
        System.out.println("银行卡刷卡器执行刷卡,卡号:" + number);
    }
}
  • 定义机器类型枚举
/**
 * @author Gjing
 * 定义机器类型
 **/
public enum  MachineType {
    /**
     * 刷卡器类型
     */
    ID_CARD,BANK_CARD;
}
  • 定义高级机器、处理器、外部插入口
/**
 * @author Gjing
 * 高级机器
 **/
public interface SuperMachine {
    /**
     * 刷卡
     */
    void blush(MachineType machineType, String number);
}

/**
 * 高级机器内部处理器
 */
class SuperMachineAdapter implements SuperMachine {
    @Override
    public void blush(MachineType machineType, String number) {
        switch (machineType) {
            case ID_CARD:
                CardMachine cardMachine = new IdCardMachine();
                cardMachine.blushIdCard(number);
                break;
            case BANK_CARD:
                cardMachine = new BankCardMachine();
                cardMachine.blushBankCard(number);
                break;
            default:
                throw new NullPointerException("没有找到合适机器");
        }
    }
}

/**
 * 高级机器提供给外部的刷卡口
 */
class SuperMachineOut implements SuperMachine {
    @Override
    public void blush(MachineType machineType, String number) {
        SuperMachineAdapter machineAdapter = new SuperMachineAdapter();
        machineAdapter.blush(machineType, number);
    }
}
  • 调用
/**
 * @author Gjing
 **/
public class Test {
    public static void main(String[] args) {
        SuperMachine superMachine = new SuperMachineOut();
        superMachine.blush(MachineType.ID_CARD, TimeUtil.localDateTimeToStamp(LocalDateTime.now())+"");
        superMachine.blush(MachineType.BANK_CARD, TimeUtil.localDateTimeToStamp(LocalDateTime.now())+"");
    }
}

应用场景:

适配器模式就是把一个类的接口转换成客户端所期待的另外一种接口,从而使原接口不匹配而无法在一起工作的的两个类能在一起工作。从功能上说,这些接口不兼容的类一般具有相同或相似的功能。通常我们通过修改该类的接口来解决这种接口不兼容的情形,但是如果我们不愿意为了一个应用而修改各原接口,或者我们压根儿就没有对象的源代码的时候,适配器模式就会派上用场了。

优点:

1、将目标类和适配者类解耦
2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性.
3、灵活性和扩展性都非常好,符合开闭原则

缺点:

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

注意:

适配器不是在详细设计时添加的,而是解决正在运行的项目的问题。


以上为个人见解,如有误欢迎各位指正

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在...
    今晚打肉山阅读 455评论 0 0
  • 适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,深受开发人员的青睐。本文会讲解适配器模...
    Tifkingsly阅读 7,921评论 1 3
  • 其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...
    zhuzhiqiang00阅读 2,176评论 0 2
  • 假期刚结束不久,也没什么好写的,今天就水下文章,讲讲设计模式对开发时的影响,做开发到现在,感觉设计模式对开发的影响...
    键盘上的麒麟臂阅读 13,371评论 3 13
  • 小目标的设定,督促自己去做。 坚持是件很难的事情,时不时“放弃”的小人就会跑出来,挥之不去,心里自是讨厌的很,有时...
    小乖韩阅读 229评论 0 0

友情链接更多精彩内容