java高级设计模式之适配器模式

  • 定义

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而

不能一起工作的那些类可以一起工作。

  • 接口和说明
  • 简单实例:
  • package adaptersimple.example1;
    /**
     * 已经存在的接口,这个接口需要被适配
     * 
     *
     */
    public class Adaptee {
        /**
         * 示意方法,原本已经存在,已经实现的方法
         */
        public void specificRequest() {
            //具体的功能处理
        }
    }
  • 适配器
  • public class Adapter implements Target {

        /**
         * 持有需要被适配的接口对象
         */
        private Adaptee adaptee;
        /**
         * 构造方法,传入需要被适配的对象
         */
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
        @Override
        public void request() {

            //可能转调已经实现了的方法,进行适配
            adaptee.specificRequest();
        }

  • /**
     * 使用适配器的客户端
     */
    public class Client{
        public static void main(String[] args) {
            //创建需要被适配的对象
            Adaptee adaptee = new Adaptee();
            //创建客户端需要调用的接口对象
            Target target = new Adapter(adaptee);
            //请求处理
            target.request();
        }
    }


  • /**
     * 定义客户端使用的接口,与特定领域相关
     */
    public interface Target {
        /**
         * 示意方法,客户端请求处理的方法
         */
        public void request();
    }

  • 适配器模式的功能
  • 1、 适配器模式的主要功能就是进行转换匹配,目的是复用已有的功能,而不是来实现新的接口。

    2、适配器里面也可以实现功能,称这种适配器为智能适配器。

    四、adaptee和target的关系

    适配器模式中被适配的接口Adaptee和适配称为的接口Target是没有关联的。

    五、适配器的调用模式

  • 对象组合
  • 适配器的实现方式其实是依靠对象组合的方式。

  • 适配的常见实例
    • 适配器通常是一个类,一般会让适配器类去实现Target接口,然后在适配器的具体实现里面调用Adaptee。
    •  可以在适配器的实现里面,加入新功能的实现,这种适配器被称为智能适配器。
    • 适配多个Adaptee
    • 适配器Adapter实现的复杂程度
    • 适配器Adapter实现的复杂程度,取决于Target和Adaptee的相似程度。

    • 缺省适配
    •    缺省适配的意思是:为一个接口提供缺省实现

    • 适配器模式的优缺点
        1:更好的复用性
        2:更好的可扩展性
        3:过多的使用适配器,会让系统非常凌乱,不容易整体进行把握。
       适配器模式的本质
        适配器模式的本质是:转换匹配,复用功能
      何时选用适配器模式
      1、如果你想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式。
        来把已有的实现转换成你需要的接口。
      2、如果你想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时需要什么
      就适配什么。
      3、如果你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,
      直接适配这些子类的父类就可以了。

猜你喜欢

转载自blog.csdn.net/youjiangtengwan1/article/details/83661519