覆盖相同implment的几种方法

时间:2017-12-14 11:10:21

标签: java design-patterns

我是从基类继承的方法 我有5个继承该方法的类并覆盖它但执行相同的操作, 现在我需要根据envoriment变量

更改所有方法以支持其他方案
//specific  implications
@Override
protected boolean prepareDirectory(Configuration configuration, Logger logger) throws Exception

    //logic here as before
    if(env===“global”) {

        //do something 
    } 
}

当然,如果所有课程都有效,我可以这样做,但有更好的方法可以解决这个问题 由于所有5个类都应在new if内使用相同的逻辑。

3 个答案:

答案 0 :(得分:2)

您可以使用抽象方法实现它。像

这样的东西
abstract class BaseClass {

    abstract void basePrepare(Configuration configuration, Logger logger);

    protected boolean prepareDirectory(Configuration configuration, Logger logger) throws Exception {
    if (/* condition */) {
        basePrepare(configuration, logger); // implementing class does his stuff
      }
    }
}

答案 1 :(得分:1)

如果您使用的是Java 8,则应使用默认方法使用Interface。

创建一个接口,然后使用默认访问修饰符创建一个方法,这将是最好的方法。

答案 2 :(得分:1)

你可以通过一个Base类来做到这一点,它可以完成五个类的通用逻辑,同时也可以为每个类提供执行特定逻辑的可能性:

class C {
  val myDBconn = ...
  val foo = 42
  {
    val localFoo = foo
    List(1,2,3).map(_ + localFoo)
  }
}

然后继承这个Base类,实现特定的逻辑:

 abstract class Base {
       public RETURN_TYPE commonLogic(SOME_PARAMS){

       //common logic goes here

        }

  public abstract RETURN_TYPE specificLogic(SOME_PARAMS);

  }