温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

设计模式系列之什么是适配器模式

发布时间:2021-10-19 09:16:25 来源:亿速云 阅读:118 作者:iii 栏目:开发技术

这篇文章主要介绍“设计模式系列之什么是适配器模式”,在日常操作中,相信很多人在设计模式系列之什么是适配器模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”设计模式系列之什么是适配器模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、概述

适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。

2、适用场景

1)当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。

2)如果您需要使用这样一些类, 他们处于同一个继承体系, 并且他们又有了额外的一些共同的方法,  但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。可以将这些方法封装在一个装饰器中。

3、实例

有以下场景:

方钉适配圆孔的适配器,方钉想放到圆孔中,则圆孔的直径等于方钉的对角长度。

方钉适配圆孔的适配器,方钉想放到圆孔中,则圆孔的直径等于方钉的对角长度。  定义方钉、圆孔  圆孔: 直径  圆钉: 直径  方钉: 边长

定义方钉:

public class SquareNails {      public double getWidth() {         return width;     }      public void setWidth(double width) {         this.width = width;     }      public SquareNails(double width) {         this.width = width;     }      /**      * 边长      */     private double width;  }

定义圆钉:

public class RoundNails {      /**      * 直径      */     private double diameter;      public double getDiameter() {         return diameter;     }      public void setDiameter(double diameter) {         this.diameter = diameter;     }      public RoundNails(double diameter) {         this.diameter = diameter;     } }

定义圆孔:

public class RoundHold {      /**      * 直径      */     private double diameter;      public RoundHold(double diameter) {         this.diameter = diameter;     }      public double getDiameter() {         return diameter;     }      public void setDiameter(double diameter) {         this.diameter = diameter;     }      /**      * 校验是否合适      * @param roundNails      * @return      */     public boolean fits(RoundNails roundNails){         if (diameter >= roundNails.getDiameter()){             return true;         }else {             return false;         }      } }

定义适配器:

public class SquareNailsRoundHoldAdapter {      public RoundNails getResult(SquareNails squareNails){         double width = squareNails.getWidth();         double diagonal = width * Math.sqrt(2);         RoundNails roundNails = new RoundNails(diagonal);         return roundNails;     } }

测试类:

@RunWith(SpringRunner.class) @SpringBootTest(classes = TestApplication.class) public class TestDemo {      @Test     public void test() {         //定义个圆孔         RoundHold roundHold = new RoundHold(10);         //定义圆钉         RoundNails roundNails = new RoundNails(10);         //定义方钉,边距10         SquareNails squareNails10 = new SquareNails(10);         //定义方钉,边距6         SquareNails squareNails6 = new SquareNails(6);         //适配器         SquareNailsRoundHoldAdapter squareNailsRoundHoldAdapter = new SquareNailsRoundHoldAdapter();         RoundNails result10 = squareNailsRoundHoldAdapter.getResult(squareNails10);         RoundNails result6 = squareNailsRoundHoldAdapter.getResult(squareNails6);         //圆钉是否合适         if (roundHold.fits(roundNails)) {             System.out.println("this round nails is fits");         } else {             System.out.println("this round nails is does not fits");         }         //10方钉是否合适         if (roundHold.fits(result10)) {             System.out.println("squareNails10 is fits");         } else {             System.out.println("squareNails10 is does not fits");         }         //6方钉是否合适         if (roundHold.fits(result6)) {             System.out.println("squareNails6 is fits");         } else {             System.out.println("squareNails6 is does not fits");         }     } }

结果:

this round nails is fits squareNails10 is does not fits squareNails6 is fits

4、总结

优点:

1)单一原则:将代码或者数据转换的过程从主要业务逻辑区分出来。

2)开闭原则:只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。

缺点:

增加代码复杂度。使用时需要考虑是否在原功能上修改更加简单。

到此,关于“设计模式系列之什么是适配器模式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI