网站网络营销方式,免费搭建自己的官网,荣成城乡建设局网站,wordpress 性能怎么样Java设计模式-结构型-适配器模式
本文我们简单说下设计模式中的适配器模式。
一、概述
与电源适配器相似#xff0c;在适配器模式中引入了一个被称为适配器(Adapter)的包装类#xff0c;而它所包装的对象称为适配者(Adaptee)#xff0c;即被适配的类。适配器的实现就是…Java设计模式-结构型-适配器模式
本文我们简单说下设计模式中的适配器模式。
一、概述
与电源适配器相似在适配器模式中引入了一个被称为适配器(Adapter)的包装类而它所包装的对象称为适配者(Adaptee)即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说当客户类调用适配器的方法时在适配器类的内部将调用适配者类的方法而这个过程对客户类是透明的客户类并不直接访问适配者类。因此适配器让那些由于接口不兼容而不能交互的类可以一起工作。
适配器模式可以将一个类的接口和另一个类的接口匹配起来而无须修改原来的适配者接口和抽象目标类接口。适配器模式定义如下 适配器模式(Adapter Pattern)将一个接口转换成客户希望的另一个接口使接口不兼容的那些类可以一起工作其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式也可以作为对象结构型模式。 所以适配器模式比较适合以下场景
1系统需要使用现有的类而这些类的接口不符合系统的接口。2使用第三方组件组件接口定义和自己定义的不同不希望修改自己的接口但是要使用第三方组件接口的功能。
二、实现方式
对象适配器模式和类适配器模式 目标接口Target客户所期待的接口。目标可以是具体的或抽象的类也可以是接口。需要适配的类Adaptee需要适配的类或适配者类。适配器Adapter通过包装一个需要适配的对象把原接口转换成目标接口。 类适配器
在类适配器模式中适配器与适配者之间是继承或实现关系。
目标接口
/*** author yuanhewei* date 2024/2/18 17:44* description*/
public interface Target {/*** 请求*/void request();
}具体实现类
/*** author yuanhewei* date 2024/2/18 18:00* description*/
public class ConcreteTarget implements Target {Overridepublic void request() {System.out.println(类适配器-ConcreteTarget: 普通的实现类具有普通的功能);}
}适配者
/*** author yuanhewei* date 2024/2/18 17:45* description*/
public class Adaptee {public void specificRequest() {System.out.println(类适配器-Adaptee: 需要被适配器包装的具有特殊功能的类);}
}适配器
/*** author yuanhewei* date 2024/2/18 17:45* description*/
public class Adapter extends Adaptee implements Target{Overridepublic void request() {super.specificRequest();}
}测试代码
/*** author yuanhewei* date 2022-02-17 20:11*/
SpringBootTest
class ClassAdapterTest {Testvoid testClassAdapter() {Target adapter new Adapter();adapter.request();Target concreteTarget new ConcreteTarget();concreteTarget.request();}
}对象适配器
在对象适配器模式中适配器与适配者之间是关联关系。
目标接口
/*** author yuanhewei* date 2024/2/18 17:44* description*/
public interface Target {/*** 请求*/void request();
}具体实现类
/*** author yuanhewei* date 2024/2/18 18:00* description*/
public class ConcreteTarget implements Target {Overridepublic void request() {System.out.println(类适配器-ConcreteTarget: 普通的实现类具有普通的功能);}
}适配者
/*** author yuanhewei* date 2024/2/18 17:45* description*/
public class Adaptee {public void specificRequest() {System.out.println(类适配器-Adaptee: 需要被适配器包装的具有特殊功能的类);}
}适配器
/*** author yuanhewei* date 2024/2/18 17:45* description*/
Service
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee adaptee;}Overridepublic void request() {adaptee.specificRequest();}
}测试代码
/*** author yunehewei* date 2022-02-17 20:11*/
SpringBootTest
class ObjectAdapterTest {Testvoid testObjAdapter() {// 适配器Target adapter new Adapter(new Adaptee());adapter.request();// 具体实现类Target concreteTarget new ConcreteTarget();concreteTarget.request();}
}从上面的代码可以看出适配器必须有一个被适配的类的对象然后通过Adapter适配器把具有具体特殊的功能交给这个对象去实现。
在使用适配器模式时可以使Adapter适配器通过传入的不同的Adaptee对象实现多个不同的被适配的类的功能。当然此时我们可以为多个被适配类提取出一个接口或抽象类。这样看起来的话似乎对象适配器模式更加灵活一点。
参考
https://blog.csdn.net/lovelion/article/details/8624325https://blog.csdn.net/a745233700/article/details/83628122