小A:“使用一个已经存在的类,如果它的接口,方法和你的要求不相同的时候,可以考虑用适配器模式吗?”
大B:“可以啊!如果两个类所做的事情相同或相似,但是他们有不同的接口的时候要使用它。类都是共享同一个接口,那你想客户代码要怎么样才行?”
小A:“客户代码只要统一调用同一接口就行了,是不是这样简单,直接,更紧凑?”
大B:“是的,软件都是需要维护的,维扩可能会因不同的开发人员,不同的产品,不同的厂家,造成功能类似但是接口不同,这时就可以使用适配器。”
小A:“你是说,在软件开发后期或维护的时候再考虑使用适配器?”
大B:“在设计阶段没必要把类似的功能类的接口设计的不同。”
小A:“可是不同的程序员定义方法的名称也可能是不同的呀!”
大B:“那也是,但是在一般公司内部,类和方法的命名是有规范的,做好前期就设计,接口不相同的时候,第一时间不应该考虑用适配器,而是考虑通过重构统一接口。”
小A:“也就是说要在双方都不太容易修改的时候,这个时候再使用适配器模式适配?不是一出现不同时就使用它?会不会有在设计初就考虑用适配器模式的情况哩?”
大B:“有,就好像在设计一个系统时使用第三方开发组件,这个组件的接口与系统接口不相同,这个时候就不用为了迎合它去改动自己的接口,在这种情况下,虽然是在开发设计阶段,解决接口不同的问题也可以用适配器模式。”
小A:“这样呐!”
大B:“有人举过这样一个例子:虎与飞禽是没有直接关联的两类动物,但是现在出来了个“飞虎”,它同时具有虎肉食动物跟飞禽会飞的特质,要在飞禽这个类系中添加一个成员类“飞虎”,除了直接实现“飞虎”类,还有一种简单的办法是实现一个Adapter类,在其中包容一个虎的对象,同时实现飞禽的接口即可。当然,对于这个问题,多继承或者实现多接口可能是一个更直观的作法,在实际应用中,可视具体需要确定采用何种作法。”