今天是五一,小伙伴们多出去玩了,每逢节假日告诉我不要出去玩,人群汹涌,人累心更累。所以就宅在宿舍了,舍友叫玩LOL游戏,昨天就一直玩游戏,今天就不玩了,无聊就写起了博客来了,劳动节也要劳动的,唉,生活就像强奸犯,如果不能反抗,就欣然接受!劳动最光荣!扯犊子,瞎BB感觉自己还是挺擅长的,好了回到重点吧。
1.适配器模式概念
适配器模式是结构型模式之一的一种。
定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。又叫变压器模式,变压器将一种电压变成另一种电压。
核心:将一个接口或类换成其他接口或者类。
角色:
1.目标角色(Target):客户所期待的接口。(目标可以是具体的或抽象的类,也可以是接口)
2.源角色(Adaptee):需要适配的类或适配者类。(被转换成目标角色的源角色)
分类:
1.类的适配器(采用继承实现,不推荐使用,Java 不支持多继承)
2.对象适配器(采用对象组合方式实现,推荐使用)
生活中的实例:我们手机在充电的时候,不可能直接在220V电源上直接充电,而是手机“充电器”进行转换成手机需要的电压才可以正常充电,否则就不可以完成充电,这个“充电器”就起到了适配的作用。
2.UML图
类的适配器UML:
对象适配器UML:
3.具体代码:
源角色:Adaptee
public class Adaptee {
//原有的需求
public void request(){
System.out.println("原有的业务处理");
}
}
目标角色:Target接口
public interface Target {
//目标接口转换处理
public void handleRequest();
}
类的适配器的适配器:Adapter
public class Adapter extends Adaptee implements Target{
//适配器继承Adaptee类,实现Target接口,将Adaptee类转换成了Target接口
@Override
public void handleRequest() {
//实现原有的业务逻辑
super.request();
}
}
类的适配器的测试:Client
//客户端
public class Client {
public static void main(String[] args) {
Target target=new Adapter();
target.handleRequest();
}
}
对象适配器的适配器:Adapter2
public class Adapter2 implements Target{
//适配器实现Target接口,对象组合
private Adaptee adaptee;//对象
public Adapter2(Adaptee adaptee) {//组合
super();
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
//实现原有的业务逻辑
adaptee.request();
}
}
对象适配器的测试:Client2
//客户端
public class Client2 {
public static void main(String[] args) {
Adaptee adaptee=new Adaptee();//对象
Target target=new Adapter2(adaptee);//组合
target.handleRequest();
}
}
4.小结
优点:
1.适配器可以将两个没有关系的类关联在一起。
2.增加类的透明性,提高类类的复用度,增强代码的灵活性。
使用场景
1.旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。
2.系统需要使用现有的类,而这些类的接口不符合系统的接口。等等场景。