• 第三节:对象适配器模式


    一、对象适配器模式

      1、基本思路和类的适配器模式相同,只是将 Adapter 类做修改,不是继承 src 类,而是持有 src 类的实例,以解决兼容性的问题。

        即:持有 src 类,实现 dst 类接口,完成 src ->dst 的适配;

      2、根据 “合成复用原则” ,在系统中尽量使用关联关系(聚合)来替代继承关系

      3、对象适配器模式是适配器模式常用的一种;

    二、对象适配器模式应用实例

      1、应用实例说明

        以生活中充电器的例子来学习适配器,充电器本身相当于 Adapter, 220V 交流电相当于 src(即被适配器),我们的目的 dst(即目标)是 5V 直流电,使用 对象适配器模式完成。

      2、思路分析

         

      3、代码实现

        src 类:

     1 /**
     2  * 被适配的类
     3  */
     4 public class Voltage220V {
     5 
     6     /**
     7      * 输出 220V 的电压
     8      * @return
     9      */
    10     public int output220V() {
    11         int src = 220;
    12         System.out.println("电压=" + src + "伏");
    13         return src;
    14     }
    15 }

      

        适配接口:

     1 /**
     2  * 适配接口
     3  */
     4 public interface IVoltage5V {
     5 
     6     /**
     7      * 输出 5V 电压
     8      * @return
     9      */
    10     public int output5V();
    11 }

      

      适配器类:

     1 /**
     2  * 适配器 类
     3  */
     4 public class VoltageAdapter implements IVoltage5V {
     5 
     6     //关联关系 —— 聚合关系
     7     Voltage220V voltage220V;
     8 
     9     //通过构造器传入一个 Voltage220V 实例
    10     public VoltageAdapter(Voltage220V voltage220V) {
    11         setVoltage220V(voltage220V);
    12     }
    13 
    14     public void setVoltage220V(Voltage220V voltage220V) {
    15         this.voltage220V = voltage220V;
    16     }
    17 
    18 
    19 
    20     @Override
    21     public int output5V() {
    22         int destV = 0;
    23         if (null != voltage220V) {
    24             //获取到 220V 电压
    25             int srcV = voltage220V.output220V();
    26             System.out.println("使用对象适配器,进行适配~~~");
    27             //降压,转成 5V
    28             destV = srcV / 44;
    29         }
    30         return destV;
    31     }
    32 }

      客户端:

     1 public class Phone {
     2 
     3     /**
     4      * 充电
     5      * @param voltage5V
     6      */
     7     public void charging(IVoltage5V voltage5V) {
     8         if (voltage5V.output5V() == 5) {
     9             System.out.println("电压为5伏特,可以充电~~");
    10         } else if (voltage5V.output5V() > 5) {
    11             System.out.println("电压过高,无法充电~~");
    12         }
    13     }
    14 }
    15 ----------------------------------------------------------------
    16 /**
    17  * 类适配器 测试
    18  */
    19 public class Client {
    20     public static void main(String[] args) {
    21         System.out.println("~~~对象适配器模式~~~");
    22         Phone phone = new Phone();
    23         phone.charging(new VoltageAdapter(new Voltage220V()));
    24     }
    25 }

    三、对象适配器模式

      1、对象适配器和类适配器其实算同一种思想,只不过实现方式不同。

         根据合成复用原则,使用组合替代继承,所以它解决了类适配器必须继承 src 的局限性问题,也不再要求 dst 必须是接口。

      2、使用成本更低,更灵活。

  • 相关阅读:
    Java Calendar详解
    Java Calendar 类的时间操作
    java获取properties配置文件值
    解决Eclipse中.properties文件中文乱码问题
    java web每天定时执行任务(四步轻松搞定)
    为经典版eclipse增加web and JavaEE插件
    VMware创建虚拟机教程详解及问题解决
    Eclipse对svn操作切换账号或更换svn地址方法
    oracle 查看用户所在的表空间
    (转)CentOS之7与6的区别
  • 原文地址:https://www.cnblogs.com/niujifei/p/14289571.html
Copyright © 2020-2023  润新知