前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抽象方法 具体方法 钩子方法

抽象方法 具体方法 钩子方法

作者头像
the5fire
发布2019-02-28 10:30:59
3.1K0
发布2019-02-28 10:30:59
举报
文章被收录于专栏:Python程序员杂谈

基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

这是我在《java与模式》书里看到的一种说法,觉得很新鲜,因为在我的印象中没有以这种方式来对方法分类,可能这也就是在设计模式中的叫法。

这三种方法也是在书中的TemplateMethod模式中提及到的,因此必不可少的要再来拿模板方法来说事。

先说这个三个方法的基本定义:

•抽象方法:由抽象类声明,由具体子类实现。在java语言里一个抽象方法以abstract关键字标示出来。

•具体方法:由抽象类声明并实现,而子类并不实现或覆盖。其实就是一般的方法,但是不需要子类来实现。

•钩子方法:由抽象类声明并实现,而子类也会加以扩展。通常抽象类给出的是一个空的钩子方法,也就是没有实现的方法。其实它和具体方法在代码上没有区别,不过是意识上的一种区别。

看其在模板方法中的应用:

来看代码:

AbstractClass1代码:

代码语言:javascript
复制
/**
 * 抽象父类,定义算法骨架和基本方法
 * @author the5fire
 *
 */
abstract class AbstractClass1 {

	/**
	 * 具体方法
	 */
	public void concreteMethod() {
		System.out.println("网站打开某一wordpress站点。。");
		System.out.println("首先主站文件。。");
		this.hookMethod();
	}

	/**
	 * 抽象方法
	 */
	protected abstract void abstractMethod();

	/**
	 * 钩子方法
	 */
	public void hookMethod(){
		/**
		 * 我可以添加一个默认的操作,也可以不写
		 */

		System.out.println("执行默认的方法,加载默认主题");

	}

}

子类ConcreteClass1的代码:

代码语言:javascript
复制
/**
 * 实现抽象父类的基本方法
 * @author the5fire
 *
 */
public class ConcreteClass1 extends AbstractClass {

	@Override
	protected void abstractMethod() {
		// TODO Auto-generated method stub
		System.out.println("实现抽象方法");
	}

	/**
	 * 重写钩子方法
	 */
	public void hookMethod() {
		System.out.println("使用the5fire特定主题");
	}

}

这样最后输出的结果就是:

如果在子类中不现实hookMethod的话就是:

从代码中可以看出,所谓的钩子方法和抽象方法有时是没有区别的,就是在子类都需要将其实现的时候。而其不同的是,抽象方法必须实现,而钩子方法可以不实现。也就是说钩子方法为你在实现某一个抽象类的时候提供了可选项。

就是先wordpress的主题一样,刚开始上来自己没有安装主题的时候它会给你一个默认的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-12-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档