zoukankan      html  css  js  c++  java
  • 【原】模式之-适配器Adapter模式

    适配器Adapter模式

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

    模式所涉及的角色有:

    • 目标Target)角色:这就是用户所期待得到的接口。
    • Adaptee)角色:现有需要适配的接口
    • 适配器Adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以使接口,而必须是具体类。

    下面以一个例子来说明适配器模式:

    假设系统是一个银行系统,只提供取款功能,目前只有两个类:

    类:BankAdaptee

    public class BankAdaptee {
    
    /**
    
     * 银行提供人民币业务
    
     */
    
    public void withdrawRMB(){
    
    System.out.println("本银行只提供人民币业务");
    
    }
    
    }

      

    类:Client

    public class Client {
    
    public static void main(String[] args) {
    
    BankAdaptee orignal = new BankAdaptee();
    
    orignal.withdrawRMB();
    
    }
    
    }

    通过运行Client类可查询出该银行现有的业务,结果如下所示:

     

    那么,我如果想要在不改变原来系统的功能下让该银行实现对于美元、日元的业务处理呢?看代码:

    添加接口:Target,该接口中指定用户想要实现的功能

    /**
    
     * 
    
     * 该接口中抽象出客户想要实现的功能
    
     *
    
     */
    
    public interface Target {
    
    /**
    
     * 银行对于人民币业务的处理
    
     */
    
    void withdrawRMB();
    
    /**
    
     * 银行对于美元业务的处理
    
     */
    
    void withdrawDollar();
    
    /**
    
     * 银行对于日元业务的处理
    
     */
    
    void withdrawJPY();
    
    }

      

    添加适配器Adapter

    public class BankAdapter extends BankAdaptee implements Target{
    
     
    
    @Override
    
    public void withdrawDollar() {
    
    System.out.println("通过适配器模式,银行新增有美元业务");
    
    }
    
     
    
    @Override
    
    public void withdrawJPY() {
    
    System.out.println("通过适配器模式,银行新增有日元业务");
    
    }
    
     
    
    }

    修改Client类:

    public class Client {
    
    public static void main(String[] args) {
    
    /*BankAdaptee orignal = new BankAdaptee();
    
    orignal.withdrawRMB();*/
    
    BankAdapter now = new BankAdapter();
    
    now.withdrawRMB();
    
    now.withdrawJPY();
    
    now.withdrawDollar();
    
    }
    
    }

    运行结果如下所示:

     

    通过以上例子是不是发现,我们只需要在系统中重新添加代码而不需要修改系统中的代码了,是不是通过这种适配器模式很好地增加了系统的可维护性、重塑性呢。

  • 相关阅读:
    sqlserver如何查询一个表的主键都是哪些表的外键
    sql server nullif的使用技巧,除数为零的处理技巧
    如何解决数据库中,数字+null=null
    sql server truncate table 删除表数据限制条件
    eclipse需要的环境变量就两个,一个是java_home指向JDK。另一个是Tomcat,自己去preference-sever下new一个
    解释Eclipse下Tomcat项目部署路径问题(.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebapps)
    mysql登录退出命令
    代码svn下载到本地后,关于数据库问题
    MySQL配置文件详解
    mysql查看存储过程show procedure status;
  • 原文地址:https://www.cnblogs.com/yourarebest/p/5125696.html
Copyright © 2011-2022 走看看