我正在创建一个与另一个类共享公共代码的类,并且我不确定应该使用哪种模式。我已经上过课:
public class TeamA{
private static final Logger LOGGER = Logger.getLogger(TeamA.class);
@Autowired
private Utility util;
public void proceedWithA(){
// do something useful here
updateProgress();
}
private void updateProgress(){
LOGGER.info("Updating progress!");
// do something to update the progress
}
}
TeamB我创建的类与TeamA几乎完全相同,只是在proceedB()
中它在调用updateProgress()
之前做了不同的事情。
public class TeamB{
private static final Logger LOGGER = Logger.getLogger(TeamB.class);
@Autowired
private Utility util;
public void proceedWithB(){
// do something useful here
updateProgress();
}
private void updateProgress(){
LOGGER.info("Updating progress!");
// do something to update the progress
}
}
所以起初我倾向于通过创建一个超类Team
来继承使用继承,以便从它们扩展:
public class Team{
// How should I define the Logger?
@Autowired
private Utility util;
protected void updateProgress(){
// LOGGER.info("Updating progress!");
// do something to update the progress
}
}
我应该如何使用记录器?在TeamA / B类中,它被定义为private static final
,但显然我不能在超类中执行相同操作,因为我想分别为TeamA和TeamB提供记录器。
我也考虑过构图。但似乎我必须将Logger作为参数传递给updateProgress
方法。这样可以或有更好的方法吗?
public class TeamA{
private static final Logger LOGGER = Logger.getLogger(TeamA.class);
@Autowired
private Team teamUtil;
public void proceedWithA(){
// do something useful here
teamUtil.updateProgress(LOGGER);
}
}
public class Team{
@Autowired
private Utility util;
protected void updateProgress(Logger LOGGER){
LOGGER.info("Updating progress!");
// do something to update the progress
}
}
我是设计模式的新手,这个记录器让我感到困惑。有人可以给我一些建议吗?谢谢:))
答案 0 :(得分:0)
public abstract class Team{
protected abstract Logger getLogger();
protected void updateProgress(){
getLogger().info("Updating progress!");
// do something to update the progress
}
}
您的子课程现在可以实现getLogger以返回他们的static final Logger
。
答案 1 :(得分:0)
“protected void updateProgress”位置需要修复,因为它的功能随类更改。 你可以在这里做的是创建一个抽象的超类,并使updateProgress抽象(这是模板模式)。让基类为它提供独立的功能。通过这种方式,您可以通过子类/超类变量使用它。 没有法律你需要在每个地方使用组合,它取决于......在你的情况下你应该使用模板方法模式。