设计模式之 适配器模式
时间:2021-09-04
本文章向大家介绍设计模式之 适配器模式,主要包括设计模式之 适配器模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
适配器模式适合用来解决不同系统之间的对接问题。
适配器模式通过定义一个适配器类作为两个不兼容的接口之间的桥梁,将一个类的接口转换成用户期望的另一个接口,使得两个或多个原本不兼容的接口可以基于适配器类一起工作。
1. 类适配器模式
在不改变原有接口或类结构的情况下扩展类的功能以适配不同的接口时,可以使用类适配器模式。类适配器模式通过创建一个继承原有类(需要扩展的类)并实现新接口来实现。
(1)原类
public class Source{ private final static Log logger = LogFactory.getLog(Source.class); public void editTextFile(){ logger.info("a text file editing"); } }
(2)定义Targetable接口
public interface Targetable{ void editTextFile(); void editWordFile(); }
(3)定义Adapter继承Source并实现Targetable接口
public class Adapter extends Source implements Targetable{ private final static Log logger = LogFactory.getLog(Adapter.class); @Override public void editWordFile(){ logger.info("a word file editing"); } }
(4)使用类的适配器
public static void main(String[] args){ Targetable target = new Adapter(); target.editTextFile(); target.editWordFile(); }
2. 对象适配器
和类适配器思路基本相同,只是修改了Adapter类。
(1)适配器类定义
public class ObjectAdapter extends Source implements Targetable{ private final static Log logger = LogFactory.getLog(ObjectAdapter.class); private Source source; public ObjectAdapter(Source source){ super(); this.source = source; } @Override public void editTextFile(){ this.source.editTextFile(); } @Override public void editWordFile(){ logger.info("a word file editing"); } }
(2)使用对象适配器模式
Source source = new Source(); Targetable target = new ObjectAdapter(); target.editTextFile(); target.editWordFile();
3. 接口适配器模式
在不希望实现一个接口的所有方法时,可以创建一个抽象类实现所有方法,在使用时继承该抽象类按需实现方法即可。
(1)定义公共接口Sourceable
public class Sourceable{ void editTextFile(); void editWordFile(); }
(2)定义抽象类并实现公共接口
public abstract class AbstractAdapter implements Sourceable{ @Override public void editTextFile(){} @Override public void editWordFile(){} }
(3)实现需求editTextFile()
public class SourceSub1 extends AbstractAdapter{ private final static Log logger = LogFactory.getLog(SourceSub1.class); @Override public void editTextFile(){ logger.info("a text file editing"); } }
(4)实现需求editWordFile()
public class SourceSub2 extends AbstractAdapter{ private final static Log logger = LogFactory.getLog(SourceSub2.class); @Override public void editWordFile(){ logger.info("a word file editing"); } }
(5)使用接口适配器
public static void main(String[] args){ Sourceable source1 = new SourceSub1(); Sourceable source2 = new SourceSub2(); source1.editTextFile(); source2.editWordFile(); }
原文地址:https://www.cnblogs.com/betterwgo/p/15227421.html
- 什么生命周期,在我看来就是各种回调 &&电商项目作业检查 -- 张xx
- 小知识点 -- nodejs中的console.log打印输出在哪里?
- 学js少看书肯定是不成的,要多看。
- 抽象是啥?就是一群人的特征;js中的call是啥?就是我想用你家的电饭锅
- 从node事件到观察者 -- 学习要有一根线索
- Joy:一款用于捕获和分析网络内部流量数据的工具
- 老尚,能讲讲闭包么?“可以,没问题,马上”
- PHP代码安全杂谈
- angularJs,请问vue是你失散多年的亲人吗?
- 无监督学习神经网络——自编码
- 不学不知道,sort()方法中的坑
- js数组去重的思路与缓动公式
- vue.js 的组件感觉比react的直观&&面试相关的七个实例
- 前端组件“可编辑表格”,怎么设计才好呢?先得有思路
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系统实战——批量无人值守安装操作系统
- python第十三课——嵌套循环
- python第十四课--排序及自定义函数
- python第十四课--排序及自定义函数之案例一:选择排序
- python第十四课--排序及自定义函数之案例二:冒泡排序
- python第十四课--排序及自定义函数之自定义函数(案例一)
- python第十四课--排序及自定义函数之自定义函数(案例二)
- python第十四课--排序及自定义函数之自定义函数(案例三)
- python第十四课--排序及自定义函数之自定义函数(案例四)
- python第十四课--排序及自定义函数之自定义函数(案例五)
- python第十五课——全局变量and局部变量
- python第十六课——ascii码
- python第十六课——外部函数and内部函数
- python第十七课——列表生成式
- python第十八课——常用内置函数