• java设计模式之适配器模式


    适配器模式

      就是改变源接口,以便于兼容目标接口;如果不准备实现一个接口的所有方法时,就可以使用“缺省适配器模式”制造一个抽象类,给出所有方法的平庸的具体实现,这样,从这个抽象类再继承下去的子类就不必实现所有的方法了。

    适配器模式实现方式

      类的适配器模式和对象的适配器模式;

    类的适配器模式:

    目标接口类:

    package adapter;
    
    public interface Target {
    
        void serviceOperation1();
        void serviceOperation2();
        void serviceOperation3();
    
    }

    需要适配接口的类:

    package adapter;
    
    public class Adaptee {
    
        /**
         * 不想实现这个serviceOperation1多余的方法,需要把它适配掉
         */
        public void serviceOperation1(){}
    }

    业务实现类:

    package adapter;
    
    /**
     * 只需要实现 serviceOperation2、serviceOperation3 
     * 避免实现多余的方法
     */
    public class Adapter extends Adaptee implements Target {
    
        @Override
        public void serviceOperation2() {
    
        }
    
        @Override
        public void serviceOperation3() {
    
        }
    }

    对象的适配器模式:

    Tatget接口类:

    package adapter;
    
    public interface Target {
    
        void serviceOperation1();
        void serviceOperation2();
        void serviceOperation3();
    
    }

    需要适配接口方法的类:

    package adapter;
    
    public class Adaptee {
    
        /**
         * 不想实现这个serviceOperation1多余的方法,需要把它适配掉
         */
        public void serviceOperation1(){}
    }

    业务操作类:

    package adapter;
    
    /**
     * 只需要实现 serviceOperation2、serviceOperation3
     * 避免实现多余的方法
     */
    public class Adapter implements Target {
        private Adaptee adaptee;
    
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public void serviceOperation1() {
            this.adaptee.serviceOperation1();
        }
    
        @Override
        public void serviceOperation2() {
    
        }
    
        @Override
        public void serviceOperation3() {
    
        }
    }

    抽象类实现适配器:

    package adapter;
    
    public interface AbstractService {
    
        void serviceOperation1();
        void serviceOperation2();
        void serviceOperation3();
    }

    抽象类实现接口(适配器类):

    package adapter;
    
    public abstract class AbstractAdapter implements AbstractService{
    
        @Override
        public void serviceOperation1() {
    
        }
    
        @Override
        public void serviceOperation2() {
    
        }
    
        @Override
        public void serviceOperation3() {
    
        }
    }

    业务实现类:

    package adapter;
    
    public class AbstractServiceImpl extends AbstractAdapter {
    
        @Override
        public void serviceOperation1() {
    
        }
    
    }
    package adapter;

    /**
    * 只需要实现 serviceOperation2、serviceOperation3
    * 避免实现多余的方法
    */
    public class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
    this.adaptee = adaptee;
    }

    @Override
    public void serviceOperation1() {
    this.adaptee.serviceOperation1();
    }

    @Override
    public void serviceOperation2() {

    }

    @Override
    public void serviceOperation3() {

    }
    }
  • 相关阅读:
    QTP实践总结
    webStorm快捷键大全
    linux下vi命令大全
    Oracle中查询各种对象的方法小结
    c#取出LDAP SearchResult所有属性
    Cool Edit Pro 2.0详细教程(转)
    移动端 触摸事件 ontouchstart、ontouchmove、ontouchend、ontouchcancel
    跨平台运行ASP.NET Core 1.0(转载)
    Linux下使用NMON监控、分析系统性能
    EAIntroView–高度可定制的iOS应用欢迎页通用解决方案
  • 原文地址:https://www.cnblogs.com/hujinshui/p/9607762.html
Copyright © 2020-2023  润新知