zoukankan      html  css  js  c++  java
  • [原创]适配器模式(java版)

    什么是适配器模式?

             将一个类的接口转换成客户希望的另外一个接口,使原来由于不兼容而不能一起工作的类可以一起工作。

    什么场景下使用适配器模式?

             比如我们要复用早期的一些代码或者第三方库或者别人维护的代码的时候,但这些代码提供的接口和我们此时的使用环境不兼容,我们又不能去修改这些代码,于是就需要使用适配器去适配这些接口以方便使用。

             使用一个已经存在的类,但如果它的方法和你的要求不相同时,就应该考虑用适配器模式。

             注意:适配器模式在详细设计阶段(开发阶段)不要考虑它,这个是维护或者扩展已有功能系统才需要考虑使用的。

    适配器模式主要包括两种类型:

             类适配器模式和对象适配器模式。

    类适配器模式:

            

             类适配器是通过继承被适配接口的实现类和实现目标接口来创建的。这样可以把该适配器作为一个目标接口的实现类,又可以在该实现类中调用被适配接口的方法。从而达到适配的目的。

    例子:

    //目标角色

    public interface  Target{

             public void request();

    }

    //源角色

    public class Adaptee{

             //原有的业务

             public void doSomething(){

                      System.out.println("a b c ");

             }

    }

    //适配器角色

    public class  Adapter extends Adaptee implements Target{

             public void request(){

                       super.doSomething();

             }

    }

    对象适配器模式:

     

             通过在适配器类的内部包装一个被适配的类对象,从而把源接口转换成目标接口,其中适配器类时目标类的子类或者实现。

    例子:

    //目标角色

    public interface  Target{

             public void request();

    }

    //源角色

    public class Adaptee{

             //原有的业务

             public void doSomething(){

                      System.out.println("a b c ");

             }

    }

    //适配器角色

    public class  Adapter  implements Target{

             private Adaptee adaptee = new Adaptee();

             public void request(){

                       adaptee.doSomething();

             }

    }

    对象适配器和类适配器的区别:

    类适配器是类间继承,但由于java中不允许多继承,因此当需要适配多个类的时候,我们使用对象适配器,对象适配器是对象的合成关系或者说是类的关联关系,这是二者的根本区别。

  • 相关阅读:
    【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言
    【Machine Learning in Action --4】朴素贝叶斯分类
    【python问题系列--3】TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
    python多行注释
    CentOS中文件夹基本操作命令
    Centos下载文件wget命令详解
    python--zeros函数和ones函数
    【python问题系列--2】脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
    【Machine Learning in Action --3】决策树ID3算法预测隐形眼睛类型
    php 利用http上传协议(表单提交上传图片 )
  • 原文地址:https://www.cnblogs.com/lordcheng/p/7298358.html
Copyright © 2011-2022 走看看