标签:
缺省适配模式是为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。
在很多情况下,必须让一个具体类实现某一个接口,但是这个类又用不到接口所规定的所有的方法。通常的处理方法是,这个具体类要实现的所有的方法,那些有用的方法要实现,那些没用的方法也要有空的、平庸的实现。
例如,一个和尚接口如下所示:
public interface 和尚 { public void 吃斋(); public void 念经(); public void 打坐(); public void 撞钟(); public void 习武(); public String getName(); }
显然所有的和尚都应该实现该接口中的方法,不然根本通不过Java的语言编译器,向下面鲁智深类就不行
public class 鲁智深 implements 和尚{ @Override public void 习武() { // TODO Auto-generated method stub 拳打镇关西; 大闹五台山; 大闹桃花村; 火烧瓦官寺; 倒拔垂杨柳; } @Override public String getName() { // TODO Auto-generated method stub return "鲁智深"; } }
如果鲁智深实现了规定的所有方法,那么鲁智深就不是鲁智深了。那该怎么解决这个问题呢?
很简单,我们只要在中间添加一个抽象类就可以解决该问题
public abstract class 天星 implements 和尚{ @Override public void 吃斋() { // TODO Auto-generated method stub } @Override public void 念经() { // TODO Auto-generated method stub } @Override public void 打坐() { // TODO Auto-generated method stub } @Override public void 撞钟() { // TODO Auto-generated method stub } @Override public void 习武() { // TODO Auto-generated method stub } @Override public String getName() { // TODO Auto-generated method stub return null; } }
鲁智深继承这个类即可
public class 鲁智深 extends 天星{ @Override public void 习武() { // TODO Auto-generated method stub 拳打镇关西; 大闹五台山; 大闹桃花村; 火烧瓦官寺; 倒拔垂杨柳; } @Override public String getName() { // TODO Auto-generated method stub return "鲁智深"; } }
这个天星类便是适配器类,这边是缺省适配器模式
什么情况下使用缺省适配器模式?
在任何时候,如果不准备实现一个接口的所有方法时,就可以制造一个抽象类,给出所有方法的平庸实现(空实现)。这样这个抽象类再继承下去的子类就没必要实现所有的方法了。
缺省适配器模式的中心是一个适配器类。这个类应当是抽象类,但是该类所提供的方法应该是具体的方法,而不是抽象的方法,因为按照模式的用意,这些方法之所以存在就是为了提供默认的实现。
标签:
原文地址:http://www.cnblogs.com/xtsylc/p/4722339.html