设计模式(六)适配器模式
时间:2021-07-20
本文章向大家介绍设计模式(六)适配器模式,主要包括设计模式(六)适配器模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、定义
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类的可以一起工作。
2、角色分析
- 目标接口:客户所期待的接口,目标可以是具体的或者抽象的类,也可以是接口。
- 需要适配的类:需要适配的类或适配者类。
- 适配器:通过包装一个需要适配的对象,把原接口转换成目标对象。
3、类图分析
4、优缺点分析
(1)对象适配器优点
- 一个对象适配器可以把多个不同的适配器适配到同一个目标;
- 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据”里氏替换“原则,适配者的子类也可通过该适配器进行适配。
(2)类适配器缺点
- 对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
- 在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。
5、适用场景
- 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码;
- 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
6、代码实例
需要适配的类:
1 /** 2 * @author it-小林 3 * @desc 要被适配的类:网线 4 * @date 2021年07月20日 19:59 5 */ 6 public class Adaptee { 7 8 public void request(){ 9 System.out.println("连接网线上网"); 10 } 11 }
目标接口
1 /** 2 * @author it-小林 3 * @desc 接口转换器的抽象实现 4 * @date 2021年07月20日 20:01 5 */ 6 public interface NetToUsb { 7 8 /** 9 * 10 * 作用:处理请求,网线=》usb 11 */ 12 public void handleRequest(); 13 }
类适配器
1 //1.继承(类适配器,单继承) 2 /** 3 * @author it-小林 4 * @desc 真正的适配器~ 需要链接usb, 链接网线 5 * @date 2021年07月20日 20:03 6 */ 7 public class Adapter extends Adaptee implements NetToUsb { 8 @Override 9 public void handleRequest() { 10 super.request(); 11 } 12 }
对象适配器
//2.组合(对象适配器:常用) /** * @author it-小林 * @desc 真正的适配器~ 需要链接usb, 链接网线 * @date 2021年07月20日 20:03 */ public class Adapter2 implements NetToUsb { private Adaptee adaptee; public Adapter2(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void handleRequest() { adaptee.request(); } }
1 /** 2 * @author it小林 3 * @desc 客户端类:想上网,插不上网线 4 * @date 2021年07月20日 20:00 5 */ 6 public class Computer { 7 //需要链接转接器才可以上网 8 public void net(NetToUsb adapter) { 9 //上网的具体实现,找一个转接头 10 adapter.handleRequest(); 11 } 12 13 public static void main(String[] args) { 14 //电脑 适配器 网线 15 /*Computer computer = new Computer(); //电脑 16 Adaptee adaptee = new Adaptee();//网线 17 Adapter adapter = new Adapter(); //转接器 18 19 computer.net(adapter);*/ 20 21 Computer computer = new Computer(); //电脑 22 Adaptee adaptee = new Adaptee();//网线 23 Adapter2 adapter = new Adapter2(adaptee); //转接器 24 computer.net(adapter); 25 } 26 }
如本文有侵权行为,请及时与本人联系,多多包涵!
小生初出茅庐,多多指教!
本文来自博客园,作者:it-小林,转载请注明原文链接:https://www.cnblogs.com/linruitao/p/15036702.html
原文地址:https://www.cnblogs.com/linruitao/p/15036702.html
- [Silverlight 4 RC]RichTextBox概览
- WCF后续之旅(4):WCF Extension Point 概览
- Asp.Net无刷新上传并裁剪头像
- 用泛型的IEqualityComparer<T>接口去重复项
- python与office(一)
- Asp.net 后台添加CSS、JS、Meta标签(帮助类)
- 分享一下cookies操作(增、删、改、查)小经验
- [Silverlight 4 RC]WebBrowserBrush概览
- 一个例子理解C#位移
- WCF后续之旅(3): WCF Service Mode Layer 的中枢—Dispatcher
- silverlight 2 Random 随机数解决方案
- 开发中巧用Enum枚举类型
- Jquery 事件冒泡
- Vue2的单元测试与调试技术
- 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 数组属性和方法
- 太实用了!自己动手写软件——我们的密码破解器终于完成了
- RabbitMQ 快速入门实战
- 在终端打印地图
- Loki漫谈
- 聊聊dubbo-go的TokenFilter
- 面试 | 卡掉不少人的一道腾讯算法面试题,高手来试试?
- 面试 | 百度测试开发岗位面试题目回顾
- ESP8266简单介绍
- 基于MTCNN和MobileFaceNet实现的人脸识别
- 学习 | egg.js 从入门到精通
- 形式化分析工具AVISPA(三)学习User micro-manual of AVISPA
- 形式化分析工具AVISPA(三)2.学习User micro-manual of AVISPA
- s6中class的一些基础知识和es5语法的对比
- 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8的部署与认证配置
- 做一个简单的京东购物栏