网站开发swf素材,dedecms做网站和thinkphp,西安做网站多少钱,广西住房城乡建设厅官方网站小谈设计模式#xff08;18#xff09;—适配器模式 专栏介绍专栏地址专栏介绍 适配器模式角色分析目标接口#xff08;Target#xff09;源接口#xff08;Adaptee#xff09;适配器#xff08;Adapter#xff09; 核心思想应用场景Java程序实现输出结果程序分析123 优… 小谈设计模式18—适配器模式 专栏介绍专栏地址专栏介绍 适配器模式角色分析目标接口Target源接口Adaptee适配器Adapter 核心思想应用场景Java程序实现输出结果程序分析123 优缺点分析优点123 缺点12 总结 专栏介绍
专栏地址
link
专栏介绍
主要对目前市面上常见的23种设计模式进行逐一分析和总结希望有兴趣的小伙伴们可以看一下会持续更新的。希望各位可以监督我我们一起学习进步加油各位。
适配器模式
适配器模式是一种结构型设计模式它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
角色分析
目标接口Target
客户端期望的接口适配器将原始接口转换成目标接口。
源接口Adaptee
需要被适配的类或接口。
适配器Adapter
实现目标接口同时持有源接口的实例将目标接口的方法调用转发给源接口的实例。
核心思想
通过适配器将目标接口的方法调用转发给源接口的实例。这样一来客户端就可以通过目标接口来使用源接口的功能。 应用场景
当需要使用一个已经存在的类但其接口不符合需求时可以使用适配器模式。例如使用第三方库提供的接口但需要将其转换成自己系统中的接口。 当需要复用一些已经存在的类但是接口与系统的其他部分不兼容时可以使用适配器模式。例如将不同数据库的操作接口统一成一个接口。
Java程序实现
// 目标接口
interface Target {void request();
}// 源接口
class Adaptee {void specificRequest() {System.out.println(Adaptee: specificRequest);}
}// 适配器
class Adapter implements Target {private Adaptee adaptee;Adapter(Adaptee adaptee) {this.adaptee adaptee;}Overridepublic void request() {adaptee.specificRequest();}
}// 客户端代码
public class Client {public static void main(String[] args) {Adaptee adaptee new Adaptee();Target target new Adapter(adaptee);target.request();}
}输出结果
Adaptee: specificRequest这说明适配器模式成功地将不兼容的接口转换成了兼容的接口使得客户端可以使用目标接口来调用源接口的功能。
程序分析
1
在上面的示例中我们有一个目标接口Target其中定义了客户端所期望的方法request。我们还有一个源接口Adaptee其中有一个不兼容的方法specificRequest。
2
为了使得客户端可以使用Target接口来调用specificRequest方法我们创建了一个适配器Adapter实现了Target接口并持有一个Adaptee的实例。在适配器的request方法中我们将Target接口的方法调用转发给Adaptee的specificRequest方法。
3
在客户端代码中我们创建了一个Adaptee实例和一个适配器Adapter实例并将Adaptee实例传递给适配器的构造函数。然后我们使用Target接口来调用request方法实际上是调用了Adaptee的specificRequest方法。
优缺点分析
优点
1
适配器模式可以让不兼容的接口协同工作。
2
适配器模式可以复用已有的类而无需修改其源代码。
3
适配器模式可以将不同接口的类组合在一起工作。
缺点
1
适配器模式增加了系统的复杂性因为需要增加一个适配器类。
2
适配器模式可能会降低系统的性能因为需要进行额外的转换操作。
总结
适配器模式可以将不兼容的接口转换成兼容的接口使得原本无法一起工作的类可以协同工作。它是一种非常常用的设计模式可以提高系统的灵活性和可扩展性。