1. 适配器模式
一、类适配器
接口A:我的手机
接口A的methodA方法:我的手机上的数据接口
接口B:我的电脑
接口B的methodB方法:我的电脑上的数据接口
我的手机与电脑不能直接数据通信:我的手机不能从我的电脑的接口上发出数据或者接收数据。
这时,我有一根数据线,它一头是手机接口的样子,一头是电脑接口的样子,两个接口都有了。那么自己身上的两个东西当然随便用啦,于是数据线把手机接口改了一点,只要你连上这个接口,你不仅会使用这个接口,还会使用另一个电脑接口。
所以我用我的手机去使用数据线上的手机接口,其实也使用了电脑接口。
抽象的说就是:
原来a接口不能使用b接口中的方法methodB,
现在有一个适配器,同时实现了两个接口,重写了A接口中的MethodA方法,在MethodA中调用了MethodB,
当以向上转换的方式生成接口A的对象,表面上看是调用了接口A中的MethodA方法,其实是通过调用适配器中MethodA方法来调用MethodB方法,这样A接口就能使用B接口中的方法了。
这种设计模式使用的场合是:
1、系统需要使用现有的类,而此类的接口不符合系统的需要。主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口(接口B)是现对象(接口A)不能满足的,但我们表面上只能使用现对象的方法,为了让它适应新环境,我们使用一个适配器,使它适应新环境的接口(能使用B方法)。
2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
3、通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)
适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。因为适配器使用多了,系统会混乱,所以尽量少用。
应用实例:java中的jdbc
二、对象适配器
对象适配器中,适配器并不实现两个接口,而是实现一个接口,为了调用另一个接口的方法,就在类中生成它的对象,通过对象调用方法。但是我们知道,接口中的方法是没有具体实现的,所以需要有一个类来实现以下这个接口的方法。在适配器中使用的是该类的对象。
有时,类B不止一个,比如B1,B2,那么需要根据具体的参数来确定适配器类中的接口B是哪个类的对象,如B b=new B1(); b.methodB()其实调用的是B1中的methodB。这样的好处是,A接口可以调用B接口不同子类的重写方法。如A接口只能播放mp3,B接口的一个子类播放mp4,一个播放avi,那么可以根据函数参数确定适配器中是使用B播放mp4还是avi。
三、接口适配器
有些时候,接口中有很多方法,如果你实现了这个接口,就要实现所有的方法,那样程序会变得很臃肿,为了让程序变得简洁,可以在两个之间添加一个类,这个类实现接口的所有方法,当继承这个类时,只重写需要重写的类。
这一条感觉和适配器模式没什么关系。。。