适配器模式
将一个已有的服务器端应用接口转换成一个客户端程序所期望的接口。
模式涉及的角色有
目标接口(ITarget):所期待的接口,这里是类适配器模式,因此目标不可以是类。
源(Adaptee):需要适配的类
适配器(Adapter):在这里把源接口转换为目标接口,显然这一接口必须是具体的类。
包括类适配器和对象适配器两种
1、类适配器
由于 Adapter 是 Adaptee的子类因此可以在Adapter中置换(override)掉Adaptee中的一些方法。但是对于类适配器,如果用此类适配源的子类就行不通了。即类适配器可以置换源的方法,对象适配器可以同时用于适配源的所有子类,反之则不容易。
2、对象适配器
这种做法很象货物的包装过程,被包装货物的真实样子被包装所掩盖和改变。因此有人把这种模式称为包装(Wrap)模式对象适配器的同一个适配器可以适配源也可以适配源的子类。但是与类适配器相比要想置换掉源类的方法就不容易,如果一定想置换掉源类的某一个方法就只好先做一个源类的子类,将源类的方法置换掉然后再把源类的子类作为真正的源进行适配。虽然置换掉源类的方法不容易,但是要增加一些新的方法则方便的很,而且新增加的方法同时适应所有的源及其子类。
![](https://i-blog.csdnimg.cn/blog_migrate/9cc51f2e668b64e61f44063f796925d3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9cc51f2e668b64e61f44063f796925d3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b2d4f536252c75acc06dea09cbf0cdbb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a3c59f99a795b14b1a6a4f857752a057.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b630d5de6093ab0dc044f7dae0a0d588.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9cc51f2e668b64e61f44063f796925d3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9cc51f2e668b64e61f44063f796925d3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9cc51f2e668b64e61f44063f796925d3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b2d4f536252c75acc06dea09cbf0cdbb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a3c59f99a795b14b1a6a4f857752a057.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b630d5de6093ab0dc044f7dae0a0d588.gif)
在这个例子中 adapter 补充了一个 adaptee 没有的方法 但不要误认为适配器就是补充源角色没有的方法而设计的。
缺省适配器模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有类型进行扩展。这样这个抽象类继承下去的子类就不必实现所有的方法了。新的类就是Adapter类而给出缺省实现的抽象类就可以被当作Adaptee。缺省适配器的目的与普通适配器的目的不同, 它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。
![](https://i-blog.csdnimg.cn/blog_migrate/9cc51f2e668b64e61f44063f796925d3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b2d4f536252c75acc06dea09cbf0cdbb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a3c59f99a795b14b1a6a4f857752a057.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd3355d8b7a7ac01140b891049529dd2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/00188546777d3bfdf0dac151f1cfbf8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bb5a2aebb3011e5dd83afd5331752fda.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53999be3c0335ecbeb8772a643231ce5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/71f07a1f79cabdd70250d62a1f2a9c56.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b630d5de6093ab0dc044f7dae0a0d588.gif)