设计模式7——适配器模式

一、举一个栗子

如果想让额定工作电压是直流12V的笔记本电脑在交流100V的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的交流100V电压转换成我们所需要的直流12V电压。这就是适配器的工作,它位于实际情况与需求之间,填补两者之间的差异。

在程序世界中,经常会存在现有的程序无法直接使用,需要做适当的变换之后才能使用的情况。这种勇于填补“现有的程序”和“所需的程序”之间差异的设计模式就是“适配器模式”

适配器有以下两种:

  • 类适配器模式(使用继承的适配器)
  • 对象适配器模式(使用委托的适配器)

二、模式的结构

在这里插入图片描述

三、实例程序(使用继承的适配器)

  • 这里的示例程序是一段会将输入的字符串显示为(hello)或者*hello*的简单程序。
  • 目前在Banner类(Banner有广告横幅的意思)中,有将字符串用括号括起来的showWithParen方法,和将字符串用*号括起来的showWithAster方法。我们假设这个Banner类是类似前文中的“交流100V电压”的实际情况。
  • 假设Print接口中声明了两个方法,即弱化字符串显示(加括号)的printWeak方法,和强调字符串显示(加*)的printStrong方法。我们假设这个接口是类似于前文中的“直流12V电压”的“需求”。
  • 现在要做的事情就是使用Banner类编写一个实现了Print接口的类,也就是说要做一个将“交流100V电压”转换成“直流12V电压”的适配器。
1. Banner

在这里插入图片描述

2. Print接口

在这里插入图片描述

3. PrintBanner

在这里插入图片描述

4. Main

在这里插入图片描述

这里我们将PrintBanner类的实例保存在了Print类型的变量中。在Main类中,我们是使用Print接口来进行编程的。对Main类的代码而言,Banner类、showWithParen方法和showWithAster方法被完全隐藏起来了。这就好像笔记本电脑只要在直流12V电压下就能正常工作,但它并不知道这12V电压是由适配器将100V电压转换而成的。Main类并不知道PrintBanner类是如何实现的,这样就可以在不用对Main类进行修改的情况下改变PrintBanner类的具体实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值