设计模式笔记--适配器模式

常用设计模式有23中,分为:

创建型模式(主要用于创建对象)

1、单例模式    2、工厂方法模式    3、抽象工厂模式    4、建造者模式     5、原型模式 
行为型模式 (主要用于描述对象或类是怎样交互和怎样分配职责)

1、模板方法模式  2、中介者模式  3、命令模式    4、责任链模式   5、策略模式   6、迭代器模式  

7、观察者模式      8、备忘录模式   9、访问者模式   10、状态模式   11、解释器模式

结构型模式(主要用于处理类或对象的组合)

1、代理模式  2、装饰模式   3、适配器模式   4、组合模式   5、外观模式(门面模式)   6、享元模式    7、桥梁模式



适配器模式   

适配器模式(Adapter Pattern)的定义如下:

 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 

适配器模式又叫做变压器模式,也叫做包装模式(Wrapper) ,但是包装模式可不止一个,还包括了第17章讲解的装饰模式 

设计模式笔记--适配器模式_第1张图片

简单地说,适配器模式就是把一个接口或类转换成其他的接口或类  

适配器模式的三个角色。

● Target目标角色
该角色定义把其他类转换为何种接口,也就是我们的期望接口

● Adaptee源角色
你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。

● Adapter适配器角色
适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方
式。  


通用源码

目标接口如代码清单19-8 所示。
代码清单19-8 目标角色
public interface Target {
//目标角色有自己的方法
public void request();
}
目标角色是一个已经在正式运行的角色,你不可能去修改角色中的方法,你能做的就是如何去实现接口中的方法,而且通常情况下,目标角色是一个接口或者是抽象类,一般不会是实现类。


一个正在服役的目标角色,如代码清单19-9所示。
代码清单19-9 目标角色的实现类
public class ConcreteTarget implements Target {
public void request() {
System.out.println("if you need any help,pls call me!"); }
}


源角色也是已经在服役状态(当然,非要新建立一个源角色,然后套用适配器模式,那也没有任何问题),它是一个正常的类,其源代码如代码清单19-10所示。
代码清单19-10 源角色
public class Adaptee {
//原有的业务逻辑
public void doSomething(){
System.out.println("I'm kind of busy,leave me alone,pls!");
}
}


我们的核心角色要出场了,适配器角色如代码清单19-11所示。
代码清单19-11 适配器角色
public class Adapter extends Adaptee implements Target {
public void request() {
super.doSomething();
}
}


所有的角色都已经在场了,那我们就开始看看这场演出,场景类如代码清单19-12所 示。
代码清单19-12 场景类
public class Client {
public static void main(String[] args) {
//原有的业务逻辑
Target target = new ConcreteTarget();
target.request();
//现在增加了适配器角色后的业务逻辑
Target target2 = new Adapter();
target2.request();
}
}  


优点  

● 适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。

● 增加了类的透明性

想想看,我们访问的Target目标角色,但是具体的实现都委托给了源角色,而这些对高层次模块是透明的,也是它不需要关心的。

● 提高了类的复用度  

● 灵活性非常好  


适配器应用的场景只要记住一点就足够了:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。  


注意事项   

适配器模式最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题  

再次提醒一点,项目一定要遵守依赖倒置原则和里氏替换原则,否则即使在适合使用适配器的场合下,也会带来非常大的改造。  


对象适配器

我们之前讲的通过继承进行的适配,叫做类适配器 

委托是通过对象层次的关联关系进行委托的,而不是继承关系,叫对象适配器。

对象适配器和类适配器的区别是:

类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系,这是两者的根本区别。

二者在实际项目中都会经常用到,由于对象适配器是通过类间的关联关系进行耦合的,因此在设计时就可以做到比较灵活,比如修补源角色的隐形缺陷,关联其他对象等,而类适配器就只能通过覆写源角色的方法进行扩展,在实际项目中,对象适配器使用到场景相对较多。  

设计模式笔记--适配器模式_第2张图片


适配器的通用代码也比较简单,把原有的继承关系变更为关联关系就可以了,不再赘述  

适配器模式是一个补偿模式,或者说是一个“补救”模式,通常用来解决接口不相容的问题  



你可能感兴趣的:(Android之设计模式,设计模式,适配器模式)