您现在的位置是:亿华云 > 数据库
设计模式系列之适配器模式
亿华云2025-10-09 06:57:21【数据库】8人已围观
简介本文转载自微信公众号「狼王编程」,作者狼王。转载本文请联系狼王编程公众号。1、概述适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。2、适用场景1)当你希望使用某个类, 但是其接口
本文转载自微信公众号「狼王编程」,设计作者狼王。模式模式转载本文请联系狼王编程公众号。系列
1、配器概述
适配器模式是设计一种结构型设计模式, 它能使接口不兼容的模式模式对象能够相互合作。
2、系列适用场景
1)当你希望使用某个类,配器 但是设计其接口与其他代码不兼容时, 可以使用适配器类。模式模式
2)如果您需要使用这样一些类,系列 他们处于同一个继承体系,配器 并且他们又有了额外的设计一些共同的方法, 但是云南idc服务商模式模式这些共同的方法不是所有在这一继承体系中的子类所具有的共性。可以将这些方法封装在一个装饰器中。系列
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 fits4、总结
优点:
1)单一原则:将代码或者数据转换的过程从主要业务逻辑区分出来。
2)开闭原则:只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。
缺点:
增加代码复杂度。使用时需要考虑是否在原功能上修改更加简单。
很赞哦!(935)
站长推荐
评估域名涉及的行业规模与发展状况成正比。
一篇了解责任链模式
一文看懂 | 关于 TypeScript 总结
你见过JS中的逗号表达式吗?这道逗号表达式的面试题,你能做对吗?
其次,一般域名注册有一个获取密码的按钮,域名注册商点击后会向您发送密码。在得到域名注册商发送的密码后,将其传输到域名服务提供商网站,然后输入密码,此时域名呈现申请状态。提交申请后,原注册人通常会向您发送一封电子邮件,询问您是否同意转让。此时,您只需点击同意转移按钮,域名注册商就可以成功转移。
项目中大量使用do{...} while(0U)的作用和意义
巧用Environment.UserInteractive 实现开发和生产环境的分开调试部署
HarmonyOS《鸿蒙操作系统开发入门经典》|线程管理|剪贴板