package com.example.designpattern.adapter.origin;/ app核心功能 @author hongcunlin /public interface App { / 显示 / void show();}
1.2.原始内容实现package com.example.designpattern.adapter.origin.impl;import com.example.designpattern.adapter.origin.App;import org.springframework.stereotype.Service;/ @author hongcunlin /@Servicepublic class AppImpl implements App { @Override public void show() { System.out.println("显示"); }}
2.1平板设计适配器接口定义第一个适配器package com.example.designpattern.adapter.target;/ 平板适配器 @author hongcunlin /public interface PadAdapter { / 显示 / void show();}
2.2.平板设备适配器接口实现package com.example.designpattern.adapter.target.impl;import com.example.designpattern.adapter.origin.App;import com.example.designpattern.adapter.target.PadAdapter;import org.springframework.stereotype.Service;import javax.annotation.Resource;/ 平板适配器实现 @author hongcunlin /@Servicepublic class PadAdapterImpl implements PadAdapter { / 原始功能 / @Resource private App app; @Override public void show() { System.out.println("调整尺寸为当前平板的12.9寸"); app.show(); }}
3.1.手机设备适配器接口定义第二个适配器package com.example.designpattern.adapter.target;/ 手机适配器 @author hongcunlin /public interface PhoneAdapter { / 显示 / void show();}
3.2.手机设备适配器实现package com.example.designpattern.adapter.target.impl;import com.example.designpattern.adapter.origin.App;import com.example.designpattern.adapter.target.PhoneAdapter;import org.springframework.stereotype.Service;import javax.annotation.Resource;/ 手机适配器实现 @author hongcunlin /@Servicepublic class PhoneAdapterImpl implements PhoneAdapter { / app / @Resource private App app; @Override public void show() { System.out.println("调整尺寸为当前手机的6.7寸"); app.show(); }}
4.测试测试经过适配器处理后的接口效果package com.example.designpattern.adapter;import com.example.designpattern.adapter.target.PadAdapter;import com.example.designpattern.adapter.target.PhoneAdapter;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;/ 适配器模式测试 @author hongcunlin /@SpringBootTestpublic class DesignPatternTest { / 平板 / @Resource private PadAdapter padAdapter; / 手机 / @Resource private PhoneAdapter phoneAdapter; @Test public void test() { // 手机 phoneAdapter.show(); // 平板 padAdapter.show(); }}
可以看到,结果是符合预期的,增加了前置处理。其他适配器模式在互联网业务开发中,还是十分常见的,特别是分布式微服务架构,每个微服务或多或少会引入其他服务的接口依赖,在使用这些外部接口时,通常会使用适配器模式封装适配(如参数转换、日志打印、监控埋点等等)之后,再调用。有空再通过日常生活内容,闲聊其他设计模式。(图片来源网络,侵删)
0 评论