当前位置:   article > 正文

设计模式之适配器模式_r适配器

r适配器

1.结构型模式

作用 

从程序的结构上实现松藕合,从而可以扩大整体的类结构,用来解决更大的问题

分类

  • 适配器模式
  • 代理模式
  • 桥接模式
  • 装饰模式
  • 组合模式
  • 外观模式
  • 享元模式

2.适配器模式 

将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作

  • 目标接口:客户所期待的接口,目标可以是具体的或者抽象的类,也可以是接口
  • 需要适配的类:需要适配的类或者是适配者类
  • 适配器:通过包装一个需要适配的对象,把原接口转换成目标对象 

 


3.适配器模式应用一

继承(类适配器,单继承)

Adaptee.java

  1. package adapter;
  2. /**
  3. * 要被适配的类:网线
  4. * @author Admin
  5. *
  6. */
  7. public class Adaptee {
  8. public void request() {
  9. System.out.println("连接网线上网");
  10. }
  11. }

 NetToUsb.java

  1. package adapter;
  2. /**
  3. * 接口转换器的抽象实现
  4. * @author Admin
  5. *
  6. */
  7. public interface NetToUsb {
  8. // 处理请求,网线到usb
  9. public void handleRequest();
  10. }

Adapter.java

  1. package adapter;
  2. /**
  3. * 真正的适配器,连接usb,连接网线
  4. * 1.继承(类适配器,单继承)
  5. * 2.组合(对象适配器,常用)
  6. * @author Admin
  7. *
  8. */
  9. public class Adapter extends Adaptee implements NetToUsb{
  10. @Override
  11. public void handleRequest() {
  12. // 可以上网
  13. super.request();
  14. }
  15. }

Computer.java

  1. package adapter;
  2. /**
  3. * 客户端类:想上网,插不上网线
  4. * @author Admin
  5. *
  6. */
  7. public class Computer {
  8. public void net(NetToUsb adapter) {
  9. // 上网的具体实现:找一个转接头
  10. adapter.handleRequest();
  11. }
  12. public static void main(String[] args) {
  13. // 电脑,适配器,网线
  14. Computer computer=new Computer(); //电脑
  15. Adaptee adaptee=new Adaptee(); //适配器
  16. Adapter adapter=new Adapter(); //转换器
  17. computer.net(adapter);
  18. }
  19. }
连接网线上网

4.适配器模式应用二

组合(对象适配器,常用),推荐使用

Adaptee.java

  1. package adapter;
  2. /**
  3. * 要被适配的类:网线
  4. * @author Admin
  5. *
  6. */
  7. public class Adaptee {
  8. public void request() {
  9. System.out.println("连接网线上网");
  10. }
  11. }

 NetToUsb.java

  1. package adapter;
  2. /**
  3. * 接口转换器的抽象实现
  4. * @author Admin
  5. *
  6. */
  7. public interface NetToUsb {
  8. // 处理请求,网线到usb
  9. public void handleRequest();
  10. }

Adapter2.java

  1. package adapter;
  2. public class Adapter2 implements NetToUsb{
  3. private Adaptee adaptee;
  4. public Adapter2(Adaptee adaptee) {
  5. this.adaptee=adaptee;
  6. }
  7. @Override
  8. public void handleRequest() {
  9. adaptee.request();
  10. }
  11. }

Computer.java

  1. package adapter;
  2. /**
  3. * 客户端类:想上网,插不上网线
  4. * @author Admin
  5. *
  6. */
  7. public class Computer {
  8. public void net(NetToUsb adapter) {
  9. // 上网的具体实现:找一个转接头
  10. adapter.handleRequest();
  11. }
  12. public static void main(String[] args) {
  13. // 电脑,适配器,网线
  14. Computer computer=new Computer(); //电脑
  15. Adaptee adaptee=new Adaptee(); //适配器
  16. Adapter2 adapter=new Adapter2(adaptee);//转换器
  17. computer.net(adapter);
  18. }
  19. }
连接网线上网

5.适配器模式优缺点及适用场景

优点 

  •  一个对象适配器可以把多个不同的适配者适配到同一个目标
  • 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据里氏代换原则,适配者的子类也可以通过该适配者进行适配

缺点

  • 对于Java,C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者
  • 在Java,C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性

适用场景

  • 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码
  • 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/828939
推荐阅读
相关标签
  

闽ICP备14008679号