码迷,mamicode.com
首页 > 其他好文 > 详细

缺省适配模式

时间:2015-08-11 22:50:52      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

缺省适配模式是为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。

在很多情况下,必须让一个具体类实现某一个接口,但是这个类又用不到接口所规定的所有的方法。通常的处理方法是,这个具体类要实现的所有的方法,那些有用的方法要实现,那些没用的方法也要有空的、平庸的实现。

例如,一个和尚接口如下所示:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!