• 设计模式之适配器模式


    适配器模式--导读

      现如今手机越来越离不开我们的生活,手机没电无疑是对我们的一种危险信号,特别是在我们外出的时候。我们一定碰到这样的情况,当我们问其他人充电器的时候,你可能会发现人家的是typec 的但是你是安卓的。你又用不了别人的充电器而只能干着急。所以我们需要一个适配器来解决这种端口不匹配的问题。

    适配器模式--定义

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

    这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

    适配器模式--结构

                                                                                                              

             这个适配器模式充满着良好的面向设计原则:使用对象组合,以修改的接口包装别适配者。而且这样做还有一个优点,被适配者的任何子类,都可以搭配适配器使用。

             适配器模式有如下四个角色:

                Target:目标抽象类

                Adapter:适配器类

                Adaptee:适配者类

                Client:客户类

    适配器模式--代码实现

      现在我们就以手机充电器为例子来实现:

    AndriodCharger.java
    package Adapter_Pattern;
    /**
     * 安卓充电器
     * @author liu
     *
     */
    public interface AndriodCharger {
        public void Andriodcharger(String type);
    }
    TypeCCharger.java
    package Adapter_Pattern;
    /**
     * typec的从电器
     * @author liu
     *
     */
    public interface TypeCCharger {
        public void TypecCharger(String type);
    }

    MyCharger.java

    package Adapter_Pattern;
    /**
     * 自己的typec从电器
     * @author liu
     *
     */
    public class MyCharger implements TypeCCharger {
    
        @Override
        public void TypecCharger(String type) {
            if(type.equals("typec"))
                System.out.println("使用typec充电器在充电");
            else
                System.out.println("插口不匹配,不能充电");
    
        }
    
    }
    OthersCharger.java
    package Adapter_Pattern;
    /**
     * 别人的安卓从电器
     * @author liu
     *
     */
    public class OthersCharger implements AndriodCharger {
    
        
        public void Andriodcharger(String type) {
            if(type.equals("安卓"))
                System.out.println("使用安卓的充电器充电");
            else
                System.out.println("端口不匹配,不能充电");
        }
    
    }
    TypeCAdapter.java
    package Adapter_Pattern;
    /**
     * typec的适配器
     * @author liu
     *
     */
    public class TypeCAdapter implements TypeCCharger {
        AndriodCharger androidCharger;
        
        public TypeCAdapter(String type) {
            if(type.equals("安卓"))
                androidCharger=new OthersCharger();
        }
        
        public void TypecCharger(String type) {
            if(type.equals("typec"))
                System.out.println("使用typec充电器在充电中");
            else if(type.equals("安卓"))
                androidCharger.Andriodcharger(type);
            else
                System.out.println("端口不匹配不能充电");
            
        }
    
    }

    client.java

    package Adapter_Pattern;
    /**
     * 模拟
     * @author liu
     *
     */
    public class Client {
        public static void main(String[] args) {
            MyCharger myCharger=new MyCharger();
            //当我没带typec充电器时,别人只有安卓充电器
            myCharger.TypecCharger("安卓");
            //因为串口不匹配所以我们需要使用,适配器来进行适配
            TypeCAdapter adapter=new TypeCAdapter("安卓");
            //这样我们就能使用安卓的充电器给typec手机端口充电了
            adapter.TypecCharger("安卓");
        }
    }

    适配器模式--优缺点

      优点:

      ①可以在不修改原有代码的基础上来复用现有类,很好地符合 “开闭原则”(这点是两种实现方式都具有的)

      ②采用 “对象组合”的方式,更符合松耦合。

      缺点:

      ①使得重定义Adaptee的行为较困难,这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

    适配器模式--场景

      1、系统需要使用现有的类,而此类的接口不符合系统的需要。

      2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。

      3、通过接口转换,将一个类插入另一个类系中

  • 相关阅读:
    BASE64
    2020-2021-1 20201217《信息安全专业导论》第二周学习总结
    师生关系20201217
    2020-2021-1 20201217王菁<<信息安全专业导论>>第一周学习总结
    作业正文(快速浏览教材提出问题)
    自我介绍20201217王菁
    罗马数字转阿拉伯数字(20201225张晓平)
    20201225 张晓平《信息安全专业导论》第三周学习总结
    20201225 张晓平《信息安全专业导论》第二周学习总结
    我期待的师生关系
  • 原文地址:https://www.cnblogs.com/sank/p/10679720.html
Copyright © 2020-2023  润新知