zoukankan      html  css  js  c++  java
  • 抽象方法 具体方法 钩子方法

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

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

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

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

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

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

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

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

    来看代码:

    AbstractClass1代码:

     1 /**
     2  * 抽象父类,定义算法骨架和基本方法
     3  * @author the5fire
     4  *
     5  */
     6 abstract class AbstractClass1 {
     7 
     8     /**
     9      * 具体方法
    10      */
    11     public void concreteMethod() {
    12         System.out.println("网站打开某一wordpress站点。。");
    13         System.out.println("首先主站文件。。");
    14         this.hookMethod();
    15     }
    16 
    17     /**
    18      * 抽象方法
    19      */
    20     protected abstract void abstractMethod();
    21 
    22     /**
    23      * 钩子方法
    24      */
    25     public void hookMethod(){
    26         /**
    27          * 我可以添加一个默认的操作,也可以不写
    28          */
    29 
    30         System.out.println("执行默认的方法,加载默认主题");
    31 
    32     }
    33 
    34 }

    子类ConcreteClass1的代码:

     1 /**
     2  * 实现抽象父类的基本方法
     3  * @author the5fire
     4  *
     5  */
     6 public class ConcreteClass1 extends AbstractClass {
     7 
     8     @Override
     9     protected void abstractMethod() {
    10         // TODO Auto-generated method stub
    11         System.out.println("实现抽象方法");
    12     }
    13 
    14     /**
    15      * 重写钩子方法
    16      */
    17     public void hookMethod() {
    18         System.out.println("使用the5fire特定主题");
    19     }
    20 
    21 }

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

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

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

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

    转载于:https://cloud.tencent.com/developer/article/1396446

  • 相关阅读:
    写一个工具生成数据库实体类
    自己写一个java的mvc框架吧(三)
    自己写一个java的mvc框架吧(二)
    自己写一个java的mvc框架吧(一)
    手把手教你写一个java的orm(完)
    JavaEE系列之(二)commons-fileupload实现文件上传、下载
    JavaEE系列之(一)JSP基础知识详解
    Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)
    Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)
    cygwin简介及使用
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/13214683.html
Copyright © 2011-2022 走看看