定义与类型
- 定义:将一个类的接口转化成客户端期望的另一个接口
- 使原本不兼容的类可以一起工作
- 类型:结构型
适用场景
- 已经存在的类,他的方法和需求不匹配时(方法或结果相似)
- 不是软件设计考虑的设计模式,是随着软件维护,由于不同产品不同厂家造成功能类似而结构不相同情况下的解决方案
优点
- 能提高类的透明性和复用,现有的类复用但不需要改变
- 目标类和适配器类解耦,提高程序扩展性
- 符合开闭原则
缺点
- 适配器的编写过程要全面考虑,可能会增加系统的复杂性
- 增加系统代码的可读性
coding
package design.structure.adapter.classdapter;
public class Adaptee {
public void AdapteeRequest(){
System.out.println("被适配者的 方法");
}
}
package design.structure.adapter.classdapter;
public class Adapter extends Adaptee implements Target{
@Override
public void request() {
super.AdapteeRequest();
}
}
package design.structure.adapter.classdapter;
public class ConcreteTarget implements Target{
@Override
public void request() {
System.out.println("ConcreteTarget方法");
}
}
package design.structure.adapter.classdapter;
public interface Target {
void request();
}
package design.structure.adapter.classdapter;
public class Test {
public static void main(String[] args) {
Target target = new ConcreteTarget();
target.request();
Target adapterTarget = new Adapter();
adapterTarget.request();
}
}
package design.structure.adapter.objectadapter;
public class Adaptee {
public void AdapteeRequest(){
System.out.println("被适配者的 方法");
}
}
package design.structure.adapter.objectadapter;
public class Adapter implements Target {
private Adaptee adaptee = new Adaptee();
@Override
public void request() {
adaptee.AdapteeRequest();
}
}
package design.structure.adapter.objectadapter;
public class ConcreteTarget implements Target{
@Override
public void request() {
System.out.println("ConcreteTarget方法");
}
}
package design.structure.adapter.objectadapter;
public interface Target {
void request();
}
package design.structure.adapter.objectadapter;
public class Test {
public static void main(String[] args) {
Target target = new ConcreteTarget();
target.request();
Target adapterTarget = new Adapter();
adapterTarget.request();
}
}
下面来看一个生活中的例子:
package design.structure.adapter;
public class AC220 {
public int outputAC220(){
int output = 220;
System.out.println("输出交流电:"+ output + "V");
return 220;
};
}
package design.structure.adapter;
public interface DC5 {
int outputDC5V();
}
package design.structure.adapter;
public class PowerAdapter implements DC5{
private AC220 ac220 = new AC220();
@Override
public int outputDC5V() {
int adapterInput = ac220.outputAC220();
//变压器
int adapteroutput = adapterInput/44;
System.out.println("使用PowerAdapter输人AC:" + adapterInput + "V" + "输出DC:" + adapteroutput +"v");
return adapteroutput;
}
}
package design.structure.adapter;
public class Test {
public static void main(String[] args) {
DC5 dc5 = new PowerAdapter();
dc5.outputDC5V();
}
}