java适配器模式例子,java适配器模式实际应用
本文带给您一些关于java的知识,包括设计模式,尤其是适配器模式。适配器模式主要用于将一个类的接口转换成客户端想要的目标类格式,这样不兼容的类就可以协同工作,并将目标类与适配器类解耦。希望对你有帮助。
如何解决写爬虫IP受阻的问题?立即使用。
一、什么是适配器模式:
适配器模式主要用于将一个类的接口转换成客户端想要的目标类格式,让原本不兼容的类协同工作,将目标类与适配器类解耦;同时也符合“开闭原则”,可以在不修改原代码的情况下添加新的适配器类;将具体实现封装在适配器类中,对客户端类是透明的,提高了适配器的复用性,但缺点是改变适配器的实现过程比较复杂。
因此,适配器模式适用于以下场景:
(1)系统需要使用已有的类,这些类的接口与系统的接口不一致。(2)使用第三方组件,组件接口定义和自己定义的不一样。你不想修改自己的接口,但是要使用第三方组件接口的功能。下面两个生动的例子说明了什么是适配器模式:
二、适配器模式的三种实现方式:
适配器模式主要分为三类:类适配器模式、对象适配器模式和接口适配器模式。
1、类的适配器模式:
//具有特殊功能的现有类,但不符合我们现有的标准接口
类适配器{
public void specificRequest() {
System.out.println(改编后的类具有特殊功能.);
}
}
//目标接口或标准接口
接口目标{
公共void请求();
}
//具体的目标类,只提供常用的函数。
类ConcreteTarget实现目标{
公共无效请求(){
System.out.println(普通类有普通函数.);
}
}
//Adapter类,继承adapted类,实现标准接口。
类适配器扩展适配器实现目标{
公共无效请求(){
super . specific request();
}
}
//测试类公共类客户端{
公共静态void main(String[] args) {
//使用公共函数类
目标混凝土目标=新混凝土目标();
concrete target . request();
//使用特殊功能类,即适配类
目标适配器=新适配器();
适配器. request();
}
}运行结果:
普通的类有普通的功能。
适应类具有特殊的功能.2、对象的适配器模式:
//适配器类,与适配类直接相关,实现标准接口。
类适配器实现目标{
//直接关联适配的类
私有适配者;
//需要适配的适配类对象可以通过构造函数传入。
公共适配器(适配器被适配器){
this.adaptee=adaptee
}
公共无效请求(){
//在这里,我们使用委托来完成特殊的功能。
this . adaptee . specific request();
}
}
//测试类
公共类客户端{
公共静态void main(String[] args) {
//使用公共函数类
目标混凝土目标=新混凝土目标();
concrete target . request();
//使用特殊函数类,即适配类,
//首先需要创建一个适配类的对象作为参数。
目标适配器=新适配器(new Adaptee());
适配器. request();
}
}检测结果与上述一致。从类图中我们也知道,需要修改的只是适配器类的内部结构,即适配器本身必须先有一个适配类的对象,然后将具体的特殊功能委托给这个对象来实现。使用对象适配器模式,适配器类(adapter class)可以根据传入的Adaptee对象适应许多不同的适配类。当然,这个时候我们可以为很多适配的类提取一个接口或者抽象类。在这种情况下,似乎对象适配器模式更灵活。
3、接口的适配器模式:
有时候我们用多个抽象方法写一个接口。我们在编写接口的实现类时,必须实现接口的所有方法,这显然有时候是浪费的,因为不是所有的方法都是我们需要的,有时候只需要一部分。这里,为了解决这个问题,我们引入接口的适配器模式。在一个抽象类的帮助下,抽象类实现了接口和所有的方法,但是我们不处理原来的接口,只处理它。看一下类图:
这个很好理解。在实际开发中,我们经常会遇到在这个接口中定义了太多的方法,以至于有时候在一些实现类中并不都需要它们。看看代码:
公共接口来源{
公共void method 1();
公共void method 2();
}抽象类包装器2:
公共抽象类Wrapper2实现Sourceable{
public void method1(){}
public void method2(){}
}
公共类SourceSub1扩展了Wrapper2 {
公共void方法1(){
system . out . println( source able接口的第一个Sub1!);
}
}
公共类SourceSub2扩展了Wrapper2 {
公共void方法1(){
system . out . println( source able接口的第二个子接口!);
}
}公共类WrapperTest {
公共静态void main(String[] args) {
source able source 1=new source sub 1();
source able source 2=new source sub 2();
source 1 . method 1();
source 1 . method 2();
source 2 . method 1();
source 2 . method 2();
}
}运行结果:
sourceable接口的第一个Sub1!
sourceable接口的第二个子接口2!推荐:《java视频教程》是Java设计模式分析的适配器模式细节(实例详解)。更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。