我对如何实现以下情况感到非常困惑。我想这样做:
Integer getScore(String string)
:
boolean isComplete(POJO pojo)
:
考虑此:
public class ATypology extends TypologyScore {
@Override
public Integer getScoreByWords(Integer integer) { return 0; }
@Override
public boolean execute(POJO pojo) { /* */ }
}
public class BTypology extends TypologyScore {
@Override
public Integer getScoreByWords(Integer integer) { return 1; }
@Override
public boolean execute(POJO pojo) { /* */ }
}
public class CTypology extends TypologyOperation {
@Override
public Integer countWords(String string) { return 0; }
@Override
public boolean execute(POJO pojo) { /* */ }
}
public abstract class TypologyScore extends TypologyOperation {
public Integer getScore(String string) {
/* ... */
return this.getScoreByWords(integer);
}
// template method
public abstract Integer getScoreByWords(Integer integer);
}
public abstract class TypologyOperation {
public abstract Integer getScore(String string);
public boolean isComplete(POJO pojo) { return this.execute(pojo); }
// template method
public abstract boolean execute(POJO pojo);
}
public class POJO {
public Integer getScore() { return typologyOperation.getScore(string); }
public boolean isComplete() { return typologyOperation.isComplete(this); }
}
问题是在CTypology
类中,我需要实现public Integer countWords(String string)
,但我不想要它,因为它永远不会使用它。有什么办法可以解决这个问题,也许是像访问者模式这样的设计模式?
如果是这样,结构会是什么样?谢谢。
您可以使用接口代替抽象类,并查看SOLID原则。就您而言-接口隔离。