在编程时,经常会出现现有程序无法直接使用,需要做适当的变换之后才能使用的情况。这种用于填补”现有程序”和”所需程序”之间的差异的设计模式就是适配器模式。
适配器模式有两种:
使用继承的适配器
类图:
代码:
1 | public class Main { |
1 | public class Banner { |
1 | public class PrintBanner extends Banner implements Print { |
这里Banner
是现有的类,Print
接口是我们要用的接口,PrintBanner
实现此接口。Main
函数中,使用Print
接口定义的方法来输出信息。注意实际上用的是实现了Print
接口的PrintBanner
中的方法,PrintBanner
又是继承自Banner
,其printWeak()
方法和printStrong()
都是调用的Banner
中的函数。这样就使得Main函数在完全不知道Banner
存在的情况下,使用了Banner
中的两个方法。就像给笔记本电脑充电,适配器连接了插座和电脑,而电脑完全不关心插座上是多少伏的电压。
使用委托的适配器
使用委托的适配器,PrintBanner
与Banner
间不再有继承关系,转为PrintBanner
持有一个Banner
,并把操作委托给Banner
。
代码
1 | public class PrintBanner extends Print { |