问题描述
以下是老师给我们讲适配器设计模式举得例子,我怎么都看不懂,感觉没有用到适配器设计模式,或者是老师本身举得这个例子就太绕了,我真的晕了。有谁给我细说说这些代码?interfacePowerSourceA{voidinsert();}classPowerSourceAImplimplementsPowerSourceA{publicvoidinsert(){System.out.println("电源A开始工作了。。。");}}interfacePowerSourceB{voidset();}classPowerSourceBImplimplementsPowerSourceB{publicvoidset(){System.out.println("电源B开始工作了。。。");}}classAdapterimplementsPowerSourceA,PowerSourceB{privatePowerSourceAa;privatePowerSourceBb;publicAdapter(PowerSourceAa){this.a=a;}publicAdapter(PowerSourceBb){this.b=b;}publicvoidinsert(){b.set();}publicvoidset(){a.insert();}}classAdapterDemo{publicstaticvoidmain(String[]args){PowerSourceAa=newPowerSourceAImpl();AdapteradapterA=newAdapter(a);set(adapterA);PowerSourceBb=newPowerSourceBImpl();AdapteradapterB=newAdapter(b);insert(adapterB);}publicstaticvoidinsert(PowerSourceAa){a.insert();}publicstaticvoidset(PowerSourceBb){b.set();}}
解决方案
解决方案二:
我是这样想的,您学习设计模式,首先要明确两点,用在什么情况适合;用了此模式,对之后扩展的影响性如何。适配器,我觉得,首先是这样,有一部分接口是您由于一些原因不能修改,或者不愿修改,另一部分接口是由您控制,然后,您需要把这两部分接口汇总起来,给出Adapter接口,比如您需要使用一些开源API,而开源组件又不能完全满足您需求,你还要加入部分自己的功能接口时。用了之后的好处,我想到一点,假设一个新的电源出现了PowerSourceC,那么您的修改是少量的可控的,而且不影响PowerSourceA,PowerSourceB的。
解决方案三:
你们老师提供的示例代码应该是有一点问题的,适配器模式是指针对某个特定类,使用组合的方式对其进行封装,让他实现某种特定接口,并在接口方法中做相应的调用,从而达到不重写特定类的时候,让我们的类能够被用到指定特殊接口类型的方法里但是在你的示例中,其实内部是包含了a,b两个电源的,因此这个类其实可以拆分成两个类classAdapterimplementsPowerSourceA{privatePowerSourceAa;privatePowerSourceBb;publicAdapter(PowerSourceAa){this.a=a;}publicvoidset(){a.insert();}}classAdapterimplementsPowerSourceA{privatePowerSourceBb;publicAdapter(PowerSourceBb){this.b=b;}publicvoidinsert(){b.set();}}
你如果是针对B电源建立的A电源适配,那么当你直接调用A电源的方法时,会空指针错误,所以不如两者拆分,分开处理
解决方案四:
比如你想用耳机听歌,你现在有一个小孔的耳机,但是你的手机插孔是大孔的,而且你还不想换耳机,这时就需要一个大小孔转换器了,这个转换器就是适配器
解决方案五:
设计模式可以先跳过。本人是比较反对"为了模式而模式"的,因为,学好"泛型、反射、注解"这三大天王之后,更容易设计框架、容器。
解决方案六:
一个双向适配器的例子
解决方案七:
这个例子其实并不太适合新手去理解,适配器很常见,现实中的例子更容易理解