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

    适配器模式

    一、简介

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

    二、使用场景

    • 现有类不符合系统需求即接口不兼容
    • 建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类包括一些可能在将来引进的类 一起工作。
    • 需要一个统一的输出接口而输入端的类型不可预知

    三、简单实现

    适配器模式有两种:类适配器和对象适配器。这里以电源接口为例,我们知道电脑手机等电子产品的电源一般都是低于标准电压220V的,因此就需要适配器来解决这种不适配的状况。

    类适配器模式

    类适配器模式是通过继承来完成转换的。

        //target 目标角色
        public interface FiveVolt{
            public int getVolt5();
        }
        //adaptee角色
        public class Volt220{
            public int getVolt220(){
                return 220;
            }
        }
        //adapter角色
        public class VoltAdapter extends Volt220 implements FiveVolt{
    
            @Override
            public int getVolt5() {
                return 5;
            }
        }
    
        public void Test(){
            VoltAdapter adapter=new VoltAdapter();
            adapter.getVolt5();
            }
    

    类适配器模式的adapter继承了Volt220并实现FiveVolt以完成电压转换的目标。

    对象适配器模式

    对象适配器模式通过代理组合来完成转换

        //target 目标角色
        public interface FiveVolt{
            public int getVolt5();
        }
        //adaptee角色
        public class Volt220{
            public int getVolt220(){
                return 220;
            }
        }
        
            public class Volt5Adapter implements FiveVolt{
         Volt220 volt220;
    
            public Volt5Adapter(Volt220 volt220) {
                this.volt220 = volt220;
            }
    
            @Override
            public int getVolt5() {
                return 5;
            }
    
            public int getVolt220(){
                return volt220.getVolt220();
            }
        }
        
        public void Test(){
            Volt5Adapter adapter1=new Volt5Adapter(new Volt220());
            adapter1.getVolt5();
        }
    

    对象适配器模式的adapter仅实现了FiveVolt接口,对于volt220则采用组合方式纳入adapter中。

    四、小结

    Android中适配器模式典型的应用就是ListView和RecycleView的Adapter。使用适配器模式可以是类有更好的复用性和更好的扩展性。但是过多的使用会让系统凌乱,不易整体把握。

  • 相关阅读:
    hdu4930 Fighting the Landlords(模拟 多校6)
    hdu4888 多校B 最大流以及最大流唯一推断+输出方案
    xUtils介绍 -- DbUtils、ViewUtils、HttpUtils、BitmapUtils
    java 读取properties文件
    poj1062昂贵的聘礼
    杭电 HDU 2717 Catch That Cow
    iOS使用自己定义字体
    Elasticsearch 2014年10月简报
    html 上下左右都居中
    Linux 比较判断运算(if else)
  • 原文地址:https://www.cnblogs.com/Robin132929/p/13816587.html
Copyright © 2011-2022 走看看