• [工作中的设计模式]适配器模式adapter


    一、模式解析

      适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。  

      也就是说,如果已经写好了一个接口,但是又来了一种截然不同的接口,如果使用新接口可能导致原来大面积的修改,那么可以考虑使用适配器模式将新的接口适配旧接口。

      适配器接口比较简单,而且适配一词现实中用的也比较多,如电源适配器,都是一个道理,所以直接上代码

    二、模式代码

    1、原有接口

    package adapter.patten;
    
    public interface Target {
        public void request();
    }

    2、新的方法

    package adapter.patten;
    
    public class Adaptee {
        
        public void specificRequest(){
            System.out.println("我正在执行specific 方法");
        }
    }

    3、适配器

    package adapter.patten;
    
    public class Adapter implements Target {
        public Adaptee adaptee;
    
        public void request(){
            adaptee=new Adaptee();
            adaptee.specificRequest();
        }
    }

    4、客户端代码

    package adapter.patten;
    
    public class Client {
        public static void main(String[] args) {
            Target target=new Adapter();
            target.request();
        }
    
    }

    5、执行结果

    我正在执行specific 方法

    三、应用场景

    在工作中遇到平台需要使用支付平台进行支付,可能存在情况是原来平台已经接入了支付宝支付,各种接口包括:支付、退货、查询、对账都已经开发完成,突然客户说想改为财付通支付方式,那么已经写好的代码均需要变化,此时就需要使用适配器进行转化。

    四、场景代码

    1、定义支付方式,调用此接口,可以完成支付

    package adapter.example;
    
    public interface IPay {
        public void pay();
    }

    2、支付宝支付流程编写

    package adapter.example;
    
    public class AliPay implements IPay {
    
        @Override
        public void pay() {
            System.out.println("通过支付宝进行支付");
        }
    
    }

    3、财付通提供的支付方式,接口与已经定义的不同

    package adapter.example;
    
    public class TenPay {
        public void tenPay(){
            System.out.println("通过财付通进行支付");
        }
    }

    4、编写适配器,进行转化

    package adapter.example;
    
    public class TenPayAdapter implements IPay {
        TenPay tenPay;
        @Override
        public void pay() {
            if(tenPay==null){
                tenPay=new TenPay();
            }
            tenPay.tenPay();
        }
    
    }

    5、客户端调用

    package adapter.example;
    
    public class Client {
        public static void main(String[] args) {
    //        IPay pay=new AliPay();
            IPay pay=new TenPayAdapter();
            pay.pay();
        }
    }

    五、说明

    1、适配器模式是当两种接口无法兼容的情况下采取的被动方式,如果可以通过设计,避免出现此种情况,那么应尽量少使用适配器模式

    2、适配器模式可以完成对象的延迟创建,如TenPayAdapter 中,直到支付方法被调用,才生成TenPay的实例

  • 相关阅读:
    仿百度排列图片预览插件-Simple Lightbox
    vue2.0移动端自定义性别选择提示框
    微信小程序踩坑记
    网页里如何使用js禁用F12事件
    使用 html2canvas 实现浏览器截图
    h5、jq 移动端评论点攒功能
    js 数字递增特效 仿支付宝我的财富 HTML5
    aos.js超赞页面滚动元素动画jQuery动画库
    简洁AngularJS框架后台管理系统bootstrap后台模板
    Ionic 的 ng-class 在聊天功能上面的巧妙运用
  • 原文地址:https://www.cnblogs.com/jyyzzjl/p/5174224.html
Copyright © 2020-2023  润新知