设计模式(八)适配器模式
程序员文章站
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();
}
}