适配器模式
假如说我们要开发一个新类,而现在有一个现成类的功能与我们要开发的新类差不多,但是这个现成类的类名不是我想要的,
我们想要的方法的方法名也不是我们想要的(接口不兼容),怎么办?
1、类的适配器模式:继承现有类,实现目标接口!
继承现有类,可以使用该类中的方法,即使该方法的方法名不是我们想要的,那么我们自己创建一个方法,在该方法内调用这(功能相同方法名不同)的方法即可。
类的适配器模式在使用时,即在创建适配器类对象时不需要传入参数。
注意:我们在写适配器类的时候,通常会把类名写为Adapter,其实这只是教学使用,在实际使用中,比如说我们要创建一个 Circle类,而现有一个SpecialCircle,适配器类名就直接是Circle,继承SpecialCircle,实现Shape,不是适配器类类名都得是Adapter.
2、对象的适配器模式:不是继承现有类,而是将现有类的实例作为适配器类的成员变量。
然后定义我们要的方法(接口),在该方法内调用该实例的对应功能的方法。这样就只需要继承目标类或者实现目标接口,用不着继承现有类了。
重点:我们之前说类的结构型模式是静态的,对象的结构型模式是动态的。从此就可以体现出来了,由于我们是把现有类的实例作为成员变量,那么当然就得写一个给这个成员变量赋值的构造函数,这个构造函数就是我们将一个现有类适配到目标接口的方式,那么我们就可以传入参数时,传现有类的子类,也就是说对象的适配器模式可以将现有类及其子类都适配到目标接口
这就是对象的结构型模式动态性的体现。
根据CARP(聚合、组合复用原则)以及对象的适配器模式的好处,我们应尽量使用对象的适配器模式。