我有一个抽象类“ TopHandler”。有两个扩展TopHandler的类:'UserHandler'和'MerchantHandler'。
我有一个sendMessage()方法,我不确定在哪里放置。一种选择是将其放入TopHandler并创建UserHandler或MerchantHandler的对象,如下所示:
public abstract class TopHandler {
//Other methods...
public void sendMessage() {
TopHandler handler;
if (message.equalsIgnoreCase("User")) {
handler = new UserHandler();
//Call UserHandler implementation of abstract methods
} else {
handler = new MerchantHandler();
//Call MerchantHandler implementation of abstract methods
}
}
}
我的另一个选择是使sendMessage()抽象化,并让两个类都实现它,但这确实会创建一些重复/非常相似的代码。
最佳答案
我个人的观点是,一个类不应该知道其子类。
如果您创建另一个从TopHandler
继承的类,将会发生什么?
您将需要更改TopHandler
类的行为,而不是简单地覆盖子类中的方法。
您可以找到其他意见here on programmers stackexchange
要回答您的问题,解决方案很简单:在每个子类中覆盖方法。如果存在重复,请尝试重构您的类以将其大部分移到TopHandler
类中。
可能是这样的:
public abstract class TopHandler {
//Other methods...
public void sendMessage() {
TopHandler handler = createHandler();
//Call Handler implementation of abstract methods
}
public abstract TopHandler createHandler();
}
PS:作为一种非静态方法,
sendMessage
实例化一个新的TopHandler
感觉很奇怪。您这里可能有问题。也许您只需要使用this
而不是新的处理程序即可(但是很难说,因为我们没有完整的代码)。