zoukankan      html  css  js  c++  java
  • java23种设计模式之三: 适配器模式

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

    二.适配器分类
      1.类适配器
       2.对象适配器

    三. 适配器的3种组成
      1.类适配器组成
        1.2个接口 A,B ,分别定义2种不同的方法
        2.1个实现类C,实现A接口,并重写方法
        3.适配类继承C 并实现B接口
      2.对象适配器
          1.2个接口 A,B ,分别定义2种不同的方法
        2.1个实现类C,实现A接口,并重写方法,同时定义B接口为该类的属性,通过构造方法将B接口传入赋值
        3.B接口的实现类

      3.接口适配器

        1.A接口中有10 个方法

        2.抽象类实现A接口,重写A接口中任意方法

        3.实现类来完成具体细节

    四.应用场景

      适配器模式其核心是将2个或多个完全没有关联的接口通过一个中间类或者接口的方式关联在一起,其目的是为了调用的方便。

      类适配器:利用多态的方式来提高面向对象模式来实现类适配器,在编程中提高了解耦合的特点

      对象适配器:通过类属性的方式来实现对象适配器,虽然其中也利用了接口的多态,但是这种方式的耦合度高,个人不建议这样用

      接口适配器:假如有个A接口中有10+个方法,我们只需要重写其中的1个方法,此时就需要一个抽象类全部空实现这个大的抽象类,然后再通过子类继承父类的方式,可以重写

            父类中我们需要的方法即可

    五.具体实现过程

     1.类适配器实现代码

    /**
     * USB接口
     * @author zhao
     *
     */
    public interface USB {
        public void USB();
    }
    
    /**
     * typeC接口
     * @author zhao
     *
     */
    public interface TypeC {
        public void typeC();
    }
    
    /**
     * typeC接口的实现类
     * @author zhao
     *
     */
    public class TypeCImpl implements TypeC{
    
        @Override
        public void typeC() {
            System.out.println("...C...接口...");
        }
    
    }
    
    /**
     * 适配器类
     * @author zhao
     *
     */
    public class Adapter extends TypeCImpl implements USB{
    
        @Override
        public void USB() {
            System.out.println("USB 转换成  TypeC 接口...");
            typeC();
        }
    }

    //类适配器_测试类代码
    public class MainTest {
        public static void main(String[] args) {
            USB adapter = new Adapter();
            adapter.USB();
        }
    }

    // 测试类代码
    public class MainTest {
      public static void main(String[] args) {
          USB adapter = new Adapter();
          adapter.USB();
      }

    }

    2.对象类适配器

    /**
     * USB接口
     * @author zhao
     *
     */
    public interface USB {
        public void USB();
    }
    
    /**
     * typeC接口
     * @author zhao
     *
     */
    public interface TypeC {
        public void typeC();
    }
    /**
     * typeC接口的实现类
     * @author zhao
     *
     */
    public class TypeCImpl implements TypeC{
    
        @Override
        public void typeC() {
            System.out.println("...C...接口...");
        }
    
    }

    /** 
     * 对象类适配器
     *
    @author zhao
     *
     
    */
    public class AdapterObject implements USB{

      private TypeC typeC;

      public AdapterObject(TypeC typeC){
        
    this.typeC = typeC;
      }
      
      @Override
      public void USB() {
        System.out.println(
    "...obj...convers");
        typeC.typeC();
       }
    }
    public class MainTest {
        public static void main(String[] args) {
            TypeC c = new TypeCImpl();
            USB adapterObj = new AdapterObject(c);
            adapterObj.USB();
        }
    }

    // 测试类代码

    public class MainTest {
      public static void main(String[] args) {
        
    TypeC c = new TypeCImpl();
        
    USB adapterObj = new AdapterObject(c);
        
    adapterObj.USB();
      }
    }

    3.接口类适配器

    /**
     * 接口类A
     * @author pengbo.zhao
     *
     */
    public interface AdapterInterface {
        void test0();
        void test1();
        void test2();
        void test3();
        void test4();
        void test5();
        void test6();
        void test7();
        void test8();
        void test9();
    }
    
    /**
     * 抽象类全部空实现
     * @author pengbo.zhao
     *
     */
    public abstract class AdapterInter implements AdapterInterface{
        
        @Override
        public void test0() {
            // TODO Auto-generated method stub
        }
        
        @Override
        public void test1() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test2() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test3() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test4() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test5() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test6() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test7() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test8() {
            // TODO Auto-generated method stub
        }
        @Override
        public void test9() {
            // TODO Auto-generated method stub
        }
    }
    
    /**
     * 适配器实现类,可以重写抽象类中的任意方法
     * @author pengbo.zhao
     *
     */
    public class AdapterImpl extends AdapterInter{
        
        
        @Override
        public void test0() {
            System.out.println("... 适配器接口...0"); 
        }
        
        @Override
        public void test3() {
            System.out.println("... 适配器接口...3");
        }
    }
  • 相关阅读:
    java数据库连接池proxool介绍及mysql8小时断开连接问题的说明
    golang 做了个mutex与atomic性能测试
    Pcre 安装
    go err
    go if switch range
    Nginx 处理Http请求头部流程
    go 指针
    golang struct、interface详解
    go slice详解
    Linux基础
  • 原文地址:https://www.cnblogs.com/MrRightZhao/p/10784106.html
Copyright © 2011-2022 走看看