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

    1.什么是配适器模式?

    当我有一个类,这个类哪方面都不错

    我想用这个类做一点事。但是这个类这种事必须要符合一种规范,而我为了防止出现其他问题

    一般都不能直接在这个类基础上直接修改

    这时,就用到配适器,吧这个类用配适器一配,让他可以满足这种规范

    配适器的三种模式,类配适器,对象配适器,接口配适器

    二.类配适器

    配适器adapter必须继承我这个要被配适的类adaptee

     还要实现目标所要求的接口

    我这里有一个source类

    public class Source{
     public  void  print(){
        System.out.println("我是源类");
    }
    }
    

    我想用这个类,但是他必须满足某种接口的要求。

    public interface Target{
       public  void add();
    }
    

    比如我要直接满足这个规范,怎么办?继承原来的source类实现这个规范。

    public class Adapter  extend Source implements Target{
       //重写ride方法
      @overrid
      public void add(){
      System.out.println("我实现add这个接口");
    }
    }
    

    然后就可以使用了。

    //new出来这个接口的实例
    Target  target=new  Adapter();
    target.add();
    

    3.对象的配适器模式

    持有被配适器的实例,来进行更改

    对象的配适器模式和类的配适器模式差不多

    只需要修改配适器模式就可以了

    所谓的对象的配适器模式,这里把源对象传进去,进行一个包装

    public  class Wrapper implements Target{
       private Source source;
       //这个源对象封装进去
       public  Wrapper(Source source){
       this.source=source;
    }
       public void add(){
       System.out.println("这是增加的方法")
    }
    }
    

    然后在使用的时候

    Source source=new Source();
    Wrapper wrapper=new Wrapper(source);
    wrapper.add
    

    4.接口的配适器模式

    接口的配适器模式主要是为了解决接口中方法过多而导致要重写这个方法的麻烦

    public interface Target{
    //在这里面定义两个抽象方法
    public void add();
    public void change();
    }
    

    现在我如果要实现这个接口,需要重写两个方法,非常麻烦,我只需要一个那怎么办?

    定义一个抽象类去实现

    public  abstract class Adaper implements Target{
            @Override
            public abstract void add();
            @Override
            public abstract void change();
    }
    

    这时一个抽象类,里面的方法都是抽象的,这样到底好不好呢?

    后来我们发现再用一个实体类去继承这个抽象类的时候,这个方法都要重写

    这和我们想的不一样啊,我只需要重写一个方法啊

    这时,这样设置,这两个方法都要设成抽象的

    public  abstract class Adapter implements Target{
                @Override
                public void add(){
                @Override
                public  void change(){};
    }
    }
  • 相关阅读:
    【react】---react中使用装饰器
    【react】---react中key值的作用
    【react】---react项目中如何使用iconfont
    【react】---redux-actions的基本使用---【巷子】
    linux查看硬件配置
    ssh实现内网穿透
    base_convert()函数探秘及小bug记录
    【转】ASCII码表
    【转载】在C语言中,double、long、unsigned、int、char类型数据所占字节数
    xdebug及phpstorm、vim+dbgpy远程调试配置以及xdebug profile+webgrind笔记
  • 原文地址:https://www.cnblogs.com/lizeyang/p/5578324.html
Copyright © 2011-2022 走看看