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

    一、定义

     将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作。

    角色:

    Target目标角色:该角色定义把其他类转换为何种接口,也就是我们期望的接口。

    Adaptee源角色:想要转换为目标角色的角色。已经存在的运行良好的类,经过适配器角色包装成为目标角色。

    Adapter适配器角色:核心角色,其他两个角色都是已经存在的角色,把源角色转换为目标角色,通过继承或者类关联的方式。

    二、类型

     接口型

    三、适用场景

     有动机修改一个已经投产中的接口,在设计阶段不应该考虑适配器模式。

    四、优点

    • 让两个没有任何关系的类在一起运行,只要适配器这个角色能搞定即可。
    • 我们访问目标角色,具体实现都委托给了源角色,而这些对高层模块是透明的,也是他不需要关心的。
    • 提高类的复用度。
    • 灵活性好,不想要了直接删除。

    五、缺点

     增加系统复杂性

    六、类图

     类适配器:

     

    对象适配器:

     

    七、代码实现

    Target:

    package com.wms.structural.adapter.classadapter;
    
    public interface Target {
        void method();
    }

    ConcreateTarget:

    package com.wms.structural.adapter.classadapter;
    
    public class ConcreateTarget implements Target {
        public void method() {
            System.out.println("concreateTarget method");
        }
    }

    Adaptee(可以定义为接口):

    package com.wms.structural.adapter.classadapter;
    
    public class Adaptee {
        public void adapteeMethod() {
            System.out.println("adaptee method");
        }
    }

    类适配器:

    package com.wms.structural.adapter.classadapter;
    
    public class ClassAdapter extends Adaptee implements Target {
        public void method() {
            this.adapteeMethod();
        }
    }

    对象适配器:

    package com.wms.structural.adapter;
    
    public class ObjectAdapter implements Target {
    
        private Adaptee adaptee;
    
        public ObjectAdapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        public void method() {
            this.adaptee.adapteeMethod();
        }
    }
  • 相关阅读:
    前后端分离
    git的基本使用
    PHP中的接口
    Java里面的接口
    面向对象的接口
    python调用Shell脚本:os.system(cmd)或os.popen(cmd)()【转】
    得到系统删除程序里的FIREFOX
    NSMutableArray,NSArray (From DFdou's Blog)
    iPhone delegate 两界面传递数据(转)
    字符串乘积运算+连接
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10252716.html
Copyright © 2011-2022 走看看