设计模式之适配器模式

来源:互联网 发布:无根门奇遇知乎 编辑:程序博客网 时间:2024/06/11 20:11

什么是适配器?做什么用的?两张图片让你先了解一下

usb与ps2转换器


 适配器模式,属于结构型模式,其主要作用是将一个类的接口转换成客户希望的另外一个接口。

适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

引用一下鲁智深的故事:

http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html

和尚要做什么呢?吃斋、念经、打坐、撞钟、习武等。如果设计一个和尚接口,给出所有的和尚都需要实现的方法,那么这个接口应当如下:

public interface 和尚 {    public void 吃斋();    public void 念经();    public void 打坐();    public void 撞钟();    public void 习武();    public String getName();}
显然,所有的和尚类都应当实现接口所定义的全部方法,不然就根本通不过JAVA语言编辑器。像下面的鲁智深类就不行。

public class 鲁智深 implements 和尚{    public void 习武(){        拳打镇关西;        大闹五台山;        大闹桃花村;        火烧瓦官寺;        倒拔垂杨柳;    }    public String getName(){        return "鲁智深";    }}
说到鲁智深了,就附一篇他临终写的一首诗吧:

平生不修善果,

只爱杀人放火。

忽地顿开金绳,

这里扯断玉锁。

钱塘江上潮信来,

今日方知我是我。

由于鲁智深只实现了getName()和习武()方法,而没有实现任何其他的方法。因此,它根本就通不过Java语言编译器。

鲁智深类只有实现和尚接口的所有的方法才可以通过Java语言编译器,但是这样一来鲁智深就不再是鲁智深了。

如何解决呢,适配器!出来解决问题!

public abstract class 天星 implements 和尚 {    public void 吃斋(){}    public void 念经(){}    public void 打坐(){}    public void 撞钟(){}    public void 习武(){}    public String getName(){        return null;    }}
这个时候抽象类天星出来了,

抽星类实现了接口而鲁智深只需要继承抽象类,因为继承抽象类只要重写它的抽象方法即可:

public class 鲁智深 extends 天星{    public void 习武(){        拳打镇关西;        大闹五台山;        大闹桃花村;        火烧瓦官寺;        倒拔垂杨柳;    }    public String getName(){        return "鲁智深";    }}


0 0
原创粉丝点击