欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式(八)适配器模式

程序员文章站 2022-06-13 12:32:58
...

一.定义与类型

1.定义:将一个类的接口转换成客户期望的另一个接口

使原本接口不兼容的类可以一起工作

2.类型:结构型

二.适用场景

1.已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)

2.不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案

三.优点

1.能提高类的透明性和复用,现有的类复用但不需要改变

2.目标类和适配器类解耦,提高程序扩展性

3.符合开闭原则

四.缺点

1.适配器编写过程需要全面考虑,可能会增加系统的复杂性

2.增加系统代码可读的难度

五.类型

1.对象适配器

2.类适配器

六.类适配器UML

设计模式(八)适配器模式

七.类适配器代码

Adaptee.java
package com.caomingyu.autotest.adapter.classadapter;

/**
 * 被适配者
 */
public class Adaptee {
    public void adapteeRequest(){
        System.out.println("被适配者的方法");
    }
}
Target.java
package com.caomingyu.autotest.adapter.classadapter;

public interface Target {
    void request();
}
ConcreteTarget.java
package com.caomingyu.autotest.adapter.classadapter;

public class ConcreteTarget implements Target {
    public void request() {
        System.out.println("ConcreteTarget目标方法");
    }
}
Adapter.java
package com.caomingyu.autotest.adapter.classadapter;

/**
 * 适配者
 */
public class Adapter extends Adaptee implements Target {
    public void request() {
        super.adapteeRequest();
    }
}
Test.java
package com.caomingyu.autotest.adapter.classadapter;

public class Test {
    public static void main(String[] args) {
        Target target = new ConcreteTarget();
        target.request();

        Target adapterTarget = new Adapter();
        adapterTarget.request();
    }
}

八.对象适配器UML

设计模式(八)适配器模式

九.对象适配器代码

Adaptee.java
package com.caomingyu.autotest.adapter.objectadapter;

/**
 * 被适配者
 */
public class Adaptee {
    public void adapteeRequest(){
        System.out.println("被适配者的方法");
    }
}
Target.java
package com.caomingyu.autotest.adapter.objectadapter;

public interface Target {
    void request();
}
ConcreteTarget.java
package com.caomingyu.autotest.adapter.objectadapter;

public class ConcreteTarget implements Target {
    public void request() {
        System.out.println("ConcreteTarget目标方法");
    }
}
Adapter.java
package com.caomingyu.autotest.adapter.objectadapter;

public class Adapter implements Target {
    private Adaptee adaptee = new Adaptee();
    public void request() {
        adaptee.adapteeRequest();
    }
}
Test.java
package com.caomingyu.autotest.adapter.objectadapter;



public class Test {
    public static void main(String[] args) {
        Target target = new ConcreteTarget();
        target.request();

        Target adapterTarget = new Adapter();
        adapterTarget.request();
    }
}

 

相关标签: java