欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

图解设计模式 - Adapter 模式

发布时间:2024/8/1 asp.net 65 豆豆
生活随笔 收集整理的这篇文章主要介绍了 图解设计模式 - Adapter 模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

读书笔记 仅供参考

Adapter 模式

Adapter 即为是适配器,用来填补两者之间的差异。就想充电器的装换器,要把 220v 的电压转换为低电压才能对手机或电脑充电。
Adapter 模式也称为 Wrapper(包装器)模式。
两种 Adapter 模式:

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

角色

Client 类是客户端,调用适配器。
Adaptee 是需要包装的类,等于是 220V 电压的接头。
Target 接口是供客户端调用的接口,它定义了适配器需要实现的方法,等于是手机充电转化器的 USB 插口。
Adapter 类是适配器类,它继承了 Adaptee 类和实现类 Target 接口,等于转换器的内部构造,清楚如何将电压从 220V 转为 5V。

代码

https://github.com/wujunyucg/DesignPattern/tree/master/src/chapter01/adapter

类适配模式

UML

例子

Banner 类,作为 Adaptee,实现了最初的方法。

public class Banner {private String string;public Banner(String string) {this.string = string;}public void showWithPattern() {System.out.println("(" + string + ")");}public void showWithStar() {System.out.println("*" + string + "*");} }

Print 接口,定义了客户端调用的方法,作为 Target

public interface Print {void printWeek();void printStrong(); }

PrintBanner 类,继承了 Banner 和实现了 Target,作为 Adpter

public class PrintBanner extends Banner implements Print{public PrintBanner(String string) {super(string);}@Overridepublic void printWeek() {showWithPattern();}@Overridepublic void printStrong() {showWithStar();} }

Main 类,测试效果

public class Main {public static void main(String[] args) {Print print = new PrintBanner("Hello");print.printWeek();print.printStrong();} }

在这个例子中,Main 调用 PrintBanner 的方法,实际上起作用的是 Banner 类中的方法,Main 并不知道其中的实现是怎样的。

例子 UML

对象适配器模式

对象适配器模式即是使用委托的模式,使用组合来替代继承。

UML


这张图和上面一张图的区别是 Adapter 并不是继承 Adaptee 和 实现 Target 了。
Adaptee 的实例作为 Adapter 的一个属性。Target 并不是一个接口,而是一个抽象类,同样定义了供 Client 调用的方法,Adapter 继承了 Target 类。

程序例子

Main 和 Banner 的程序和上面一样。

Print 类,为抽象类。

public abstract class Print {public abstract void printWeek();public abstract void printStrong(); }

PrintBanner 类,拥有一个 Banner 实例,继承了 Print 类。在实现哦方法中调用了 Banner 的方法。

public class PrintBanner extends Print{private Banner banner;public PrintBanner(String string) {this.banner = new Banner(string);}@Overridepublic void printWeek() {banner.showWithPattern();}@Overridepublic void printStrong() {banner.showWithStar();} }

例子 UML

何时使用 Adapter 模式

复用已有组件

我们更倾向于不修改已有程序的代码,并且能够更多的复用已存在的“组件”。Adapter 模式会对现有类进行适配,生成新的类,当出现 BUG 时,我们也能确定出现问题的是 Adapter 类,而不是 Adaptee 类。

没有现成的代码

有时候我们会想到把现有程序改一改就可以成功运行了,但有时候我们只能使用一些特定的接口,无法知道源代码,这样 Adapter 模式就可以发挥作用了。

版本升级与兼容性

使用 Adapter 模式可以很好地解决软件版本升级后出现的兼容性问题。

相关设计模式

Bridge 模式

Adapter 模式用于连接接口不同的类,Bridge 模式用于连接类的功能层次结构和实现层次结构

Decorator 模式

Decorator 模式是在不改变接口的前提下添加功能。

总结

以上是生活随笔为你收集整理的图解设计模式 - Adapter 模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。