以前写过一些设计模式的博客,今天回过头看了看,竟然全是代码。还是不太好理解,毕竟这些博客都是从博客园搬家过来的,有些格式都出错了。今天准备重新写一次适配器模式,采用好理解的方式。在书上看了一个例子,感觉讲的很不错,贴出来分享一下:
看看这三张照片应该对适配器模式有一个完整的认识了(我将这三张照片对应的代码上传到附件里了(AdapterPatternA---C)),接下来我通过一个小故事讲述一下适配器模式:
我先讲个故事:狗狗王国有很多的狗狗,鼠鼠王国发生了饥荒,很多鼠鼠都迁移到了狗狗王国,现在狗狗王国的大街上可以看到很多的鼠鼠,为了统一,现在需要一个适配器将鼠鼠们可以像狗狗们那样在狗狗王国自在的生活。
适配器类 实现(implements)目标接口(Dog),依赖要转化的接口(Mouse)。
鼠鼠们的接口(因为鼠鼠有很多种类,比如说小白鼠,小胖鼠神马的):老鼠只能nagnag的叫:
package com.wjy.mouse;
public interface Mouse {
public void nag();
}
泡泡鼠来到了狗狗王国:
package com.wjy.mouse;
public class BubleMouse implements Mouse{
@Override
public void nag() {
// TODO Auto-generated method stub
System.out.println("I am actually a BubleMouse.");
}
}
狗狗王国遵循的接口:
package com.wjy.Dog;
public interface Dog {
public void speak();
}
适配器登场,将鼠鼠是配成狗狗:
package com.wjy.adapter.mouseToDog;
import com.wjy.Dog.Dog;
import com.wjy.mouse.Mouse;
public class AdapterMouseToDog implements Dog{
private Mouse mouse;
public AdapterMouseToDog(Mouse mouse){
this.mouse=mouse;
}
@Override
public void speak() {
// TODO Auto-generated method stub
mouse.nag();
}
}
这样一来,泡泡鼠鼠就可以在狗狗王国快乐的生活了:
package start;
import com.wjy.Dog.Dog;
import com.wjy.adapter.mouseToDog.AdapterMouseToDog;
import com.wjy.mouse.BubleMouse;
import com.wjy.mouse.Mouse;
public class start {
public static void main(String[] args){
Mouse mouse=new BubleMouse();
Dog dog=new AdapterMouseToDog(mouse);
dog.speak();
}
}
/**
* 看吧,现在就可以像Dog一样使用Mouse了。给人的感觉就是通过适配器将mouse转化为了dog。
*/
通过以上例子,可以看出来。适配器类中我们使用了组合。这也是为什么伟大的《Java编程思想》中说的,”如果不是为了上转型,还是提倡使用组合而非继承“的原因。毕竟组合优于继承的。
关于组合优于继承的一篇博客大家可以参考一下:http://www.cnblogs.com/shipengzhi/articles/2086419.html