java设计模式5——适配器模式
程序员文章站
2022-06-27 21:11:29
1、结构型设计模式
2、适配器模式
3、类适配器
4、对象适配器 ......
java设计模式5——适配器模式
1、结构型模式介绍
1.1、作用
从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。
分类:
- 适配器模式
- 代理模式
- 桥接模式
- 装饰模式
- 组合模式
- 外观模式
-
享元模式
2、适配器模式介绍
适配器模式(adapter pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
本节举例:(网线和笔记本电脑)
3、第一种建模方式:(使用继承,网线和转换器绑在一起)又称为类适配器
3.1、定义要适配的类(网线)
package com.xgp.company.结构性模式.第一种_适配器模式; /** * 要被适配的类(网线) */ public class adaptee { public void request() { system.out.println("连接网线上网!"); } }
3.2、定义客户端类(电脑)
package com.xgp.company.结构性模式.第一种_适配器模式; /** * 客户端类:想上网,插不上网线 */ public class computer { //我们的电脑需要连接上转接器才能上网 public void net(nettousb adapter) { //上网的具体实现,找一个转接头 adapter.handlerequest(); } public static void main(string[] args) { //电脑,适配器,网线 computer computer = new computer(); adapter adapter = new adapter(); // adaptee adaptee = new adaptee(); computer.net(adapter); } }
此时,该电脑无法插入网线进行上网,因此需要适配
3.3、定义适配器的抽象实现
package com.xgp.company.结构性模式.第一种_适配器模式; /** * 接口转换器的抽像实现 */ public interface nettousb { //作用:处理请求(网 => usb) public void handlerequest(); }
3.4、定义具体的网线转换器
package com.xgp.company.结构性模式.第一种_适配器模式; /** * 1、继承方式(类适配器) * 2、组合(对象适配器:常用) */ /** * 适配器:需要连接usb和网线 */ public class adapter extends adaptee implements nettousb { @override public void handlerequest() { //可以上网了 super.request(); } }
此时网线通过适配器插入了电脑,实现了上网的功能了
连接网线上网!
4、第二种建模方式:(使用组合,网线和转换器分离)又称为对象适配器
网线类和适配器的抽象类不变
4.1、适配器类的改进
package com.xgp.company.结构性模式.第二种_适配器模式; /** * 1、继承方式(类适配器) * 2、组合(对象适配器:常用) */ /** * 适配器:需要连接usb和网线 */ public class adapter implements nettousb { private adaptee adaptee; public adapter(adaptee adaptee) { this.adaptee = adaptee; } @override public void handlerequest() { //可以上网了 adaptee.request(); } }
4.2、电脑类的改进
package com.xgp.company.结构性模式.第二种_适配器模式; /** * 客户端类:想上网,插不上网线 */ public class computer { //我们的电脑需要连接上转接器才能上网 public void net(nettousb adapter) { //上网的具体实现,找一个转接头 adapter.handlerequest(); } public static void main(string[] args) { //电脑,适配器,网线 computer computer = new computer(); adaptee adaptee = new adaptee(); adapter adapter = new adapter(adaptee); computer.net(adapter); } }
4.3、测试,电脑成功连上网线进行上网了
连接网线上网!