【问题标题】:What is the proper style for implementing a skeleton class?实现骨架类的正确样式是什么?
【发布时间】:2016-03-03 20:57:07
【问题描述】:

在 Java 中实现骨架类的正确风格是什么?

我所说的骨架是指提供骨架实用程序代码的类,但需要一个子类来实现某些部分。

在 C++ 中,我只会将纯虚方法添加到类中,但 Java 对接口和类有严格的区分,所以这不是一个选项。

基本上模式应该是这样的:

class Skel { 
  void body() {
    this.action1();
    this.action2();
  }
};

class UserImpl : extends A {
   void action1() {
      impl;
   }

   void action2() {
      impl;
   }
}

/* ... snip ... */

Skel inst = new UserImpl();

/* ... snip ... */

inst.body();

【问题讨论】:

  • 你不是在找抽象类吗?
  • 还有 C++?这不是合法的 Java 代码。

标签: java skeleton-code


【解决方案1】:
abstract class Skel {abstract void action1();
    abstract void action1();
    abstract void action2();
    public void body() {
        action1();
        action2();
    }
}

class UserImpl extends Skel {
    @Override
    public void action1() {
        //...
    }
    @Override
    public void action2() {
        //..
    }
}

使用抽象类,甚至更好地提取通用接口,以便您的类被它引用。

interface CommonInterface {
    void action1();
    void action2();
    void body(); 
}

abstract class Skel implements  CommonInterface{

    public void body() {
        action1();
        action2();
    }
}

class UserImpl extends Skel {

    @Override
    public void action1() {
        //...
    }

    @Override
    public void action2() {
        //..
    }
}

【讨论】:

    【解决方案2】:

    Java 中的抽象方法类似于 C++ 中的虚拟方法。

    你需要声明一个带有抽象方法的抽象类Skel,并在子类中实现:

    public abstract class Skel {
    
        public void body() {
            this.action1();
            this.action2();
        }
    
        abstract void action1();
        abstract void action2();
    
    }
    

    【讨论】:

    • 注意:您可以将body() final 设置为子类不会覆盖它。
    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2011-11-06
    • 2018-08-12
    相关资源
    最近更新 更多