今天要介绍的是,结构型模式中的最被人熟知的,适配器模式
首先要介绍的是,为什么需要适配器模式。以及使用他的好处在哪里。
客户使用接口或一个抽象的类的方法,例如客户需要浏览网页,那么接口动作就是浏览网页
那么适配器就是各种浏览器的适配器了,例如UC浏览器适配器,IE浏览器适配器,腾讯浏览器适配器,然后各种适配器都会调用具体的浏览器,因为一开始浏览器的调用并不是共用并且可见的。那么通过浏览器适配器的具体实现,那么用户可以简单的通过调用浏览网页这个接口方法来得到具体的浏览器适配器的实现。好处就是可以有多种可选方案。
并且各个适配器的实施也可以完全分离。
其次要介绍的是,在实际工作中,有哪些地方需要用到适配器模式。系统需要使用现有的类,而这些类的接口不符合系统的接口应该是一个不错的解释。
最实际的例子就是,我们生活中的电源插座。这就是一种适配器。电源适配器的插头规格是固定的,就类似于插头的接口是既定的。
但是对于相同的插头,可以使用不同的用电器。或者再来举一个更易懂的例子,同样的一个鼠标click事件,但是ServiceA的事件也许需要ServerA的调用来得到需要的内容,ServiceB的事件就需要ServiceB来调用,所以当我们用适配器来实现的时候,就会很方便的插拔我们需要的Service实现了。
也许这么说有点混乱。
最后来简单的举了一个例子,来说明具体的实例该如何实现
package cn.edu.ken.designpattern.adapter;
public abstract class Browser {
public abstract void browseInternet();
}
package cn.edu.ken.designpattern.adapter;
public class UCBrowserAdapter extends Browser{
private UCBrowser uc;
public UCBrowserAdapter(){
uc = new UCBrowser();
}
@Override
public void browseInternet() {
// TODO Auto-generated method stub
uc.browse();
}
}
package cn.edu.ken.designpattern.adapter;
public class UCBrowser {
public void browse() {
// TODO Auto-generated method stub
System.out.println("UC browse");
}
}
package cn.edu.ken.designpattern.adapter;
public class Client {
public static void main(String[] args){
Browser browser = new UCBrowserAdapter();
}
}