文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么理解设计模式的结构型模式

2024-04-02 19:55

关注

这篇文章主要讲解了“怎么理解设计模式的结构型模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解设计模式的结构型模式”吧!

认识结构型模式

结构型模式所描述的是如何将类和对象结合在一起来形成一个更大的结构,它描述两种不同的事物:类和对象,根据这一点,可分为类结构型和对象结构型模式。类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系;对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式

结构型模式的实例

以适配器模式为例,代码解析

说到适配器,我们最熟悉的莫过于电源适配器了,也就是手机的充电头。它就是适配器模式的一个应用。

大家可以试想一下,如果你有一条连接电脑和手机的 USB 数据线,连接电脑的一端从电脑接口处接收 5V 的电压,连接手机的一端向手机输出 5V  的电压,并且它们都工作良好。

我们常用的家用电压都是 220V,所以 USB 数据线不能直接拿来给手机充电,这时候我们有两种方案:

如果你使用过早期的手机,就会知道以前的手机厂商采用的就是第一种方案:早期的手机充电器都是单独制作的,充电头和充电线是连在一起的,但现在的手机都采用了电源适配器加数据线的方案。

现在我要说的适配器模式,就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

适配的意思是适应、匹配。通俗地讲,适配器模式适用于有相关性但不兼容的结构,源接口通过一个中间件转换后才可以适用于目标接口,这个转换过程就是适配,这个中间件就称之为适配器。

家用电源和 USB 数据线有相关性:家用电源输出电压,USB 数据线输入电压。但两个接口无法兼容,因为一个输出 220V,一个输入 5V,通过适配器将输出  220V 转换成输出 5V 之后才可以一起工作。

接下来,我用程序模拟一下这个过程:

家庭电源提供220V的电压

HomeBattery类:

class HomeBattery {     int supply() {         // 家用电源提供一个 220V 的输出电压         return 220;     } }

USB 数据线只接收 5V 的充电电压

USBLine类:

class USBLine {     void charge(int volt) {         // 如果电压不是 5V,抛出异常         if (volt != 5) throw new IllegalArgumentException("只能接收 5V 电压");         // 如果电压是 5V,正常充电         System.out.println("正常充电");     } }

先来看看适配之前,用户如果直接用家庭电源给手机充电:

User类

public class User {     @Test     public void chargeForPhone() {         HomeBattery homeBattery = new HomeBattery();         int homeVolt = homeBattery.supply();         System.out.println("家庭电源提供的电压是 " + homeVolt + "V");          USBLine usbLine = new USBLine();         usbLine.charge(homeVolt);     } }

运行结果如下:

这时,如果加入电源适配器:

Adapter类

class Adapter {     int convert(int homeVolt) {         // 适配过程:使用电阻、电容等器件将其降低为输出 5V         int chargeVolt = homeVolt - 215;         return chargeVolt;     } }

然后,用户再使用适配器将家庭电源提供的电压转换为充电电压:

User类

public class User {     @Test     public void chargeForPhone() {         HomeBattery homeBattery = new HomeBattery();         int homeVolt = homeBattery.supply();         System.out.println("家庭电源提供的电压是 " + homeVolt + "V");          Adapter adapter = new Adapter();         int chargeVolt = adapter.convert(homeVolt);         System.out.println("使用适配器将家庭电压转换成了 " + chargeVolt + "V");          USBLine usbLine = new USBLine();         usbLine.charge(chargeVolt);     } }

运行结果如下:

这就是适配器模式。在我们日常的开发中经常会使用到各种各样的 Adapter,都属于适配器模式的应用。

但适配器模式并不推荐多用。因为未雨绸缪好过亡羊补牢,如果事先能预防接口不同的问题,不匹配问题就不会发生,只有遇到源接口无法改变时,才应该考虑使用适配器。比如现代的电源插口中很多已经增加了专门的充电接口,让我们不需要再使用适配器转换接口,这又是社会的一个进步。

感谢各位的阅读,以上就是“怎么理解设计模式的结构型模式”的内容了,经过本文的学习后,相信大家对怎么理解设计模式的结构型模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯