通过NBA教练布置战术理解适配器模式

     如果想使用一个已经存在的类,但是,如果它的方法和你的要求不同的时候,就应该考虑使用适配器模式。
     当你的电脑所能接受的电压和你提供的电压不相符的时候,就需要使用适配器。
    (支持20V电压的笔记本是Target类,220V的家庭用电是Adaptee类,电源适配器这个就是Adapter了)


    通过NBA教练布置战术理解适配器模式_第1张图片
     

     看一下这个类图,教练给队员布置战术,其中一名队员是姚明,他不会英语,教练的战术他听不懂,所以只好请一个翻译为他翻译。
     球员相当于一个虚拟目标类,而前锋、中锋、后卫是具体的实现类。外籍中锋是一个适配者类,翻译就是适配器了。
     情景描述:教练让后卫麦迪进攻,让前锋巴蒂尔防守,让姚明既要进攻,又要防守。麦偶迪和巴蒂尔都是能听懂,不过姚明听不懂英语,所以不知道教练再讲什么。这样就找了个翻译为姚明翻译。姚明属于一个外籍的中锋,教练给一个外籍中锋布置战术,中锋类中有 attack()和defense()方法,外籍中锋类中有 进攻()和防守()方法。姚明只能明白这样的方法,而不能明白attack()和defense()方法。然而教练(相当于客户端类)需要attack()和defense()两个方法,但是外籍中锋类中没有这两个方法,有的是另外的两个方法,这个纠结啊。所以就需要有个翻译者将attack()和defense()翻译成进攻()和防守()方法。这就需要翻译者类继承中锋类(或者是球员类),来实现attack()和defense()方法,在这两个方法里做翻译的实现,那怎么实现呢?通过与外籍中锋关联关系实现,在翻译者类中定义一个“外籍中锋对象”,然后通过set注入或者构造注入方式注入进去,最后在attack()和defense()方法中调用外籍中锋类中的方法进行翻译操作。。。



附加一下优缺点:

适配器模式的优点
     1、将目标类和适配器类解耦
     2、将具体的实现封装在适配者类中,对于客户端来说是透明的
     3、符合开闭原则
     
类适配器模式附加优点:
     1、适配器类是适配者的子类,所以可以在适配器类中置换一些适配者的方法,使得适配器更加灵活

类适配器模式的缺点:
     1、对于Java、c#不支持多重继承,所以一个适配器一次最多只能适配一个适配者,而且目标类只能是接口,不可以为类,使用具有一定的局限性。
     

对象适配器模式附加优点:
     1、可以将多个不同的适配者是配到同一个目标中,同一个适配器可以把适配者类和它的子类都适配到目标接口中。
     

对象适配器模式的缺点:
     1、如果想要置换适配者类中的方法就不容易了,如果想实现的话,可以新建一个适配者类的子类,然后将适配者类中的方法置换掉,然后再把适配者子类当做真正的适配者去适配。


你可能感兴趣的:(适配器模式)