zoukankan      html  css  js  c++  java
  • Java适配器模式

    假如我的手机是typec类型的充电口,但是现在却只有个传统的MicroUSB充电线,怎么办?很简单,弄个转换接头,MicroUSB口转化成typec的,问题解决。这就是适配器的应用。

      适配器就是个转化适配中间接口,可以将不匹配的两件事整合到一起,把不匹配变的匹配。

      通常,适配器有三种:类适配器、对象适配器。

        类适配器:继承实现,静态定义

        对象适配器:代理实现,动态组合模式

      一、类适配器

        1.1、有个传统的Micro USB的充电线

    复制代码
    package com.cn.adapter.classAdapter;
    
    /**
     * 有个传统的Micro USB的充电线
     * 
     * @author cfang
     * 2018年6月1日 下午4:13:01
     */
    public interface MicroUSB {
    
        void isMicroUSB();
    }
    复制代码

        1.2、手机充电口为typec

    复制代码
    package com.cn.adapter.classAdapter;
    
    /**
     * 手机充电口为typec
     * 
     * @author cfang
     * 2018年6月1日 下午4:14:28
     */
    public interface TypeC {
    
        void isTypeC();
    }
    复制代码
    复制代码
    package com.cn.adapter.classAdapter;
    
    
    public class TypeCImpl implements TypeC{
    
        @Override
        public void isTypeC() {
            System.out.println("typec充电口");
        }
    
    }
    复制代码

        1.3、整个适配器adapter,将MicroUSB 转化成typec

    复制代码
    package com.cn.adapter.classAdapter;
    
    /**
     * 用于将MicroUSB接口转化成tytpec接口
     * 
     * @author cfang
     * 2018年6月1日 下午4:46:28
     */
    public class Adapter extends TypeCImpl implements MicroUSB{
    
        @Override
        public void isMicroUSB() {
            isTypeC();
        }
    
    }
    复制代码

        1.4、测试main方法

    复制代码
    package com.cn.adapter.classAdapter;
    
    public class App {
    
        public static void main(String[] args) {
            
            MicroUSB microUSB = new Adapter();
            microUSB.isMicroUSB();
        }
    }
    复制代码

      二、对象适配器

        2.1、TypeC接口、MicroUSB接口以及实现同上

        2.3、适配器类

    复制代码
    package com.cn.adapter.objectAdapter;
    
    import com.cn.adapter.classAdapter.MicroUSB;
    import com.cn.adapter.classAdapter.TypeC;
    
    public class Adapter implements MicroUSB{
        
        private TypeC typeC;
        public Adapter(TypeC typeC){
            this.typeC = typeC;
        }
    
        @Override
        public void isMicroUSB() {
            typeC.isTypeC();
        }
        
    
    }
    复制代码

        2.4、测试main方法

    复制代码
    package com.cn.adapter.objectAdapter;
    
    import com.cn.adapter.classAdapter.MicroUSB;
    import com.cn.adapter.classAdapter.TypeC;
    import com.cn.adapter.classAdapter.TypeCImpl;
    
    public class App {
    
        public static void main(String[] args) {
            
            TypeC typeC = new TypeCImpl();
            MicroUSB microUSB = new Adapter(typeC);
            microUSB.isMicroUSB();
        }
    }
    复制代码

      三、很多时候,还会遇到一种适配器,接口的适配器,很简单,假如有个很大的接口,几十个方法,但是并不是每个实现该接口的都必须得实现所有方法,此时,就可以做个抽象的中间类,实现大接口,方法实现都是空。之后开发,都继承这个抽象类,用哪些方法,就覆写哪些方法。

     1 package com.example.springboot.dto;
     2 
     3 public interface A {
     4     void a0();
     5     void a1();
     6     void a2();
     7     void a3();
     8     void a4();
     9 }
    10 
    11 /**
    12  * 接口适配器
    13  */
    14 public abstract  class Adapter implements A {
    15 
    16     public void a0() {
    17 
    18     }
    19 
    20     public void a1() {
    21 
    22     }
    23 
    24     public void a2() {
    25 
    26     }
    27 
    28     public void a3() {
    29 
    30     }
    31 
    32     public void a4() {
    33 
    34     }
    35 }
    36 public class B extends Adapter{
    37 
    38     public void a2() {
    39         super.a2();
    40     }
    41 }

    转载于:https://www.cnblogs.com/eric-fang/p/9122564.html

  • 相关阅读:
    10分钟用JS实现微信 "炸屎"大作战
    基于nodejs 的多页面爬虫
    react+react-router 4.0+redux 构建购物车实战项目
    vue+websocket+express+mongodb实战项目(实时聊天)
    用vuejs仿网易云音乐(实现听歌以及搜索功能)
    js 实现 bind 的这五层,你在第几层?
    教你如何搭建一个自动化构建的博客
    vue-chat项目之重构与体验优化
    vue+websocket+express+mongodb实战项目(实时聊天)(二)
    css 多栏自适应布局
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13254579.html
Copyright © 2011-2022 走看看