前言
对于很多程序员,平时写代码为了方便,可能一股脑就按面向过程那样一下把业务逻辑编写下来,少有会去额外思考设计模式或者算法。这种情况其实不利于我们的编码维护,在本文,将介绍设计模式中的观察者模式,通过本文的介绍将帮助你快速理解和应用。
1、什么是适配器模式?
适配器是一种结构型设计模式,它将一个类的接口转换成另一个客户端所期望的接口.适配器模式让那些不兼容的类可以一起工作,它通过不兼容接口转换成可兼容接口来实现这一点.
2、适配器模式的结构
适配器模式包括以下几个角色:
(1)目标接口(Target)
定义客户端所期望的接口,也就是客户端需要使用的接口
(2)源接口(Adaptee)
已经存在的,不兼容的接口,也就是需要适配的接口
(3)适配器(Adapter)
将源接口转换成目标接口的类,它实现了目标接口,并持有一个源接口的引用,将客户端请求转发给源接口.
3、适配器模式的实现
假设原来有一个获取产品接口GetPoductV1 ,此次需要一个新的获取产品接口GetPoductV2,我们又想采用旧接口实现,此时我们可以用适配器的设计模式来兼容
原接口类的实现
public class GetPoductV1 {
/**
* 原 获取产品信息
*/
protected void getProduct(){
System.out.println("获取产品信息");
}
}
需要兼容的新接口
public interface GetPoductV2 {
/**
* 获取产品信息
*/
void getProductV2();
}
创建一个类适配器
//类适配器
public class GetPoductAdapter extends GetPoductV1 implements GetPoductV2 {
@Override
public void getProductV2() {
getProduct();
System.out.println("转换成新的产品信息输出");
}
}
创建一个对象适配器
//对象适配器
public class GetPoductAdapter1 implements GetPoductV2 {
private GetPoductV1 getPoductV1;
public GetPoductAdapter1(GetPoductV1 getPoductV1){
this.getPoductV1 = getPoductV1;
}
@Override
public void getProductV2() {
getPoductV1.getProduct();
System.out.println("转换成新的产品信息输出");
}
}
接口调用测试
@GetMapping(value = "/adapter", produces = MediaType.APPLICATION_JSON_VALUE)
public void adapter() {
GetPoductAdapter getPoductAdapter = new GetPoductAdapter();
getPoductAdapter.getProductV2();
GetPoductAdapter1 getPoductAdapter1 = new GetPoductAdapter1(new GetPoductV1());
getPoductAdapter1.getProductV2();
}