Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说动手写一个适配器模式(JAVA版),希望能够帮助你!!!。
适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。
该模式的主要优点如下。
其缺点是:
类适配器模式可采用多重继承方式实现,如 C++ 可定义一个适配器类来同时继承当前系统的业务接口和现有组件库中已经存在的组件接口;Java 不支持多继承,但可以定义一个适配器类来实现当前系统的业务接口,同时又继承现有组件库中已经存在的组件。
对象适配器模式可釆用将现有组件库中已经实现的组件引入适配器类中,该类同时实现当前系统的业务接口。现在来介绍它们的基本结构。
/**
* @descript 这是一个原始的接口
* This is a primitive interface
* @author 79197
*/
public interface TargetObject {
public void originalExtendedFunction() ;
}
/**
* @descript 这是被扩展类
* 作用是:在接口不满足客户需求的时候,扩展客户需求
* This is a function extended by the customer,When the interface does not meet the customer's requirements,
* the customer's requirements are extended
* @author 79197
*/
public class Adatpee {
public void extensionMethod() {
System.out.println("这是被客户扩展的类!!!(This is a function extended by the customer!)");
}
}
/**
* @descript 这是一个类适配器
* this is a class adapter
* @author 79197
*/
public class AdapterObject extends Adatpee implements TargetObject{
@Override
public void originalExtendedFunction() {
System.out.println("这是原始类,它不能满足客户需求!需要做如下扩展:::");
System.out.println("this is original class,it does not meet customer needs!The following extensions are required:::");
System.out.println("==================================================");
super.extensionMethod();
}
}
public class AdapterModeTest {
public static void main(String[] args) {
//类适配器
TargetObject obj=new AdapterObject();
obj.originalExtendedFunction();
}
}
/**
* @descript 这是一个原始的接口
* This is a primitive interface
* @author 79197
*/
public interface TargetObject {
public void originalExtendedFunction() ;
}
/**
* Descript 被适配抽象方法 Adapted abstract method
* @author 79197
*/
abstract class AdatpeeObjec {
public void extensionMethod() {}
}
/**
* Descript 扩展类
* @author 79197
*/
public class AdatpeeObjectA extends AdatpeeObjec{
public void extensionMethod() {
System.out.println("由AdatpeeObjectA类扩展的内容(Content extended by AdatpeeObjectA)");
}
}
/**
* Descript 扩展类
* @author 79197
*/
public class AdatpeeObjectB extends AdatpeeObjec{
public void extensionMethod() {
System.out.println("由AdatpeeObjectB类扩展的内容(Content extended by AdatpeeObjectB)");
}
}
public class AdapterForObject implements TargetObject{
AdatpeeObjec adatpeeObjec;
public AdapterForObject(AdatpeeObjec id_adatpeeObjec) {
this.adatpeeObjec=id_adatpeeObjec;
}
public void originalExtendedFunction() {
System.out.println("这是原始类,它不能满足客户需求!需要做如下扩展:::");
System.out.println("this is original class,it does not meet customer needs!The following extensions are required:::");
System.out.println("==================================================");
adatpeeObjec.extensionMethod();
}
}
public class AdapterModeTest {
public static void main(String[] args) {
//类适配器
/**
TargetObject obj=new AdapterObject();
obj.originalExtendedFunction();
*/
//对象适配器
AdatpeeObjectA aObj=new AdatpeeObjectA();
AdatpeeObjectB bObj=new AdatpeeObjectB();
TargetObject obj01=new AdapterForObject(aObj);
TargetObject obj02=new AdapterForObject(bObj);
obj01.originalExtendedFunction();
obj02.originalExtendedFunction();
}
}
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇