• 适配器模式


    定义:

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

    角色:

    目标(Target)角色:这就是所期待得到的接口,也就是这类的接口是符合我们要求的。

    源(Adapee)角色:我们要使用的接口,但是这个接口不符合我们的要求,也就是现在需要适配的接口。

    适配器(Adaper)角色:适配器类是适配器模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。

    分类:

    1,  类适配器模式

    class Adaptee {         
       public void specificRequest() {         System.out.println("特殊请求,这个是源角色");    } }
    /*这个是目标角色,所期待的接口*/

    interface Target {        
       public void request(); }

     现在想要实现这个Target接口,但是不想重构,想要用上已有的Adaptee类,这时可以定义一个适配器类,继承想要使用的类,并且实现期待的接口。

    class Adapter extends Adaptee implements Target{
             publicvoid request() {
                       super.specificRequest();
             }
    }

     现在想要实现这个Target接口,但是不想重构,想要用上已有的Adaptee类,这时可以定义一个适配器类,继承想要使用的类,并且实现期待的接口。

    class Adapter extends Adaptee implementsTarget{
             publicvoid request() {
                       super.specificRequest();
             }
    }

    使用适配器类和实现目标接口就完成了计划,测试:

    public class Test{
             publicstatic void main(String[] args) {
                       //使用特殊功能类,即适配类
                       Targetadapter = new Adapter();
                       adapter.request();
             }
    }

    2,  对象适配器模式

    适配器类关联已有的Adaptee类,并且实现标准接口,这样做的好处是不再需要继承。

    class Adapter implements Target{
             privateAdaptee adaptee;
    
             publicAdapter (Adaptee adaptee) {
                       this.adaptee= adaptee;
             }
    
             publicvoid request() {
                       this.adaptee.specificRequest();
             }
    }

    测试:

    public class Test{
             publicstatic void main(String[] args) {
                       Targetadapter = new Adapter(new Adaptee());
                       adapter.request();
             }
    }
     

    适用场景:

    1、已经存在的类的接口不符合我们的需求;

    2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类协同工作;

    3、使用一些已经存在的子类而不需要对其进行子类化来匹配接口。

    4、旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

     
  • 相关阅读:
    2017年第八届蓝桥杯C/C++ C组国赛 —— 第一题:哥德巴赫分解
    Tree Walk Aizu
    Tree Walk Aizu
    Binary Trees Aizu
    有效的括号
    划分整数
    最大子矩阵和
    最大子段和
    最长上升子序列
    合唱队形
  • 原文地址:https://www.cnblogs.com/KL2016/p/15791315.html
Copyright © 2020-2023  润新知