详解设计模式-Adapter模式
2023-04-18 12:36:31 时间
文章概览
1. Adapter模式
如果想让额定工作电压是直流12V的笔记本电脑在交流100V的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的100V电压转换成我们需要的12V电压。这就是适配器所完成的工作,它工作在实际情况与需求之间,弥补两者之间的差距。
在程序世界中,经常会存在现有程序无法直接使用的问题,需要做适当的变换之后才能使用。这种用于填补“现有的程序”和“所需的程序”之间差异的设计模式就是Adapter模式。 Adapter模式也被称为Wrapper模式。Wrapper有“包装器”的意思,就像用精美的包装纸将商品包成礼物那样,替我们把某样东西包起来,使其能够用于其他用途。 Adapter模式有两种:
- 类适配器模式(使用继承的适配器)
- 对象适配器模式(使用委托的适配器)
2.示例程序1(使用继承的适配器)
这是一段会将输入的字符串显示为(Hello)或者*Hello*的简单程序。 目前在Banner类中,有将字符串用括号括起来的showWithParen方法,和将字符串用*号括起来的showWithAster方法。我们假设这个Banner类是类似上面所说的交流100V的实际情况。
假设Print接口中声明了两种方法,即弱化字符串显示(加括号)的printWeak和强调字符串的printStrong方法。我们假设这个接口是类似上面所说的直流12V的需求。
现在要做的就是使用Banner类编写一个实现了Print接口的类,也就是说要做一个将交流100V转换成直流12V的适配器。
扮演适配器角色的是PrintBanner类。该类继承了Banner类并实现了“需求”–Print接口。
类图
(待补充)
Banner类
假设Banner类是现在的实际情况。
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("(" + string + ")");
}
public void showWithAster() {
System.out.println("*" + string + "*");
}
}
Print接口
假设Print接口是“需求”的接口。
public interface Print {
public abstract void printWeak();
public abstract void printStrong();
}
PrintBanner类
PrintBanner扮演适配器的角色。
public class PrintBanner extends Banner implements Print{
public PrintBanner(String string) {
super(string);
}
public void printWeak() {
showWithParen();
}
public void printStrong() {
showWithAster();
}
}
Main类
public class Main {
public static void main(String args[]) {
Print p = new PrintBanner("Hello");
p.printWeak();
p.printStrong();
}
}
运行结果
未完待续
相关文章
- 工业机器人行业的六大发展趋势
- IDC:2021年中国公有云托管安全服务市场规模6420万美金
- 服务网关:SpringCloud Gateway核心技术
- 如何实施安全的服务网格
- 专有云你想知道的,这一篇就够了
- SPI 子系统之SPI Driver
- MarketsandMarkets:2027年基于云的联络中心市场价值546亿美元
- 一文聊透 IP 地址的那些事
- 一文搞懂全网上线的 IP 属地功能
- 一文彻悟容器网络通信
- 不止于RPA:UiPath助力企业业务自动化提速
- Wi-Fi 联盟: Wi-Fi 6 和 6E 已被“快速采用”
- VMware发布vSphere+和vSAN+,集中式基础架构管理简化运营
- 瑞数信息:快消行业面临严峻的API攻击,API安全治理势在必行
- Wi-Fi 6:有什么不同,为什么重要?
- 解决小型政府办公室带宽问题的三个技巧
- 云存储架构能解决 DevOps 的什么问题?
- 2022 年会是您采用多云的一年吗?
- SPI 子系统之SPI spec
- 监控Kubernetes的最佳实践、工具和方法