我有一个混蛋模板方法实现。它不是具有子类实现的基类,而是一个util类上的静态方法,它接受它所委托的接口。我想将其重构为更常见的模式,以便我可以停止传递Domain类。
我认为第一步是将模板转换为对象方法,但是我对如何将我的5个Helper实现(未显示)移动到新Template对象的子类中感到茫然。
public interface Helper
{
void doFirstThing(Domain d);
void doSecondThing(String id);
}
public class UtilClass
{
public static void template(Domain d, Helper h, String who)
{
//begin database transaction
try
{
//some logic
h.doFirstThing(d);
//more computation
h.doSecondThing(d.getId());
//database commit();
}
finally
{
//if transaction open database rollback();
}
}
}
public class Domain
{
public String getId()
{
return "value";
}
}
答案 0 :(得分:0)
如下所示...
public abstract class TemplateX
{
protected Domain _domain;
protected TemplateX(Domain domain)
{
_domain = domain;
}
protected abstract void DoFirstThing();
protected abstract void DoSecondThing();
public void DoIt(string who)
{
//begin database transaction
try
{
//some logic
DoFirstThing();
//more computation
DoSecondThing();
//database commit();
}
finally
{
//if transaction open database rollback();
}
}
}
public class Implementation1 : TemplateX
{
public Implementation1(Domain domain) : base(domain)
{
}
protected override void DoFirstThing()
{
//code from helper class here
}
protected override void DoSecondThing()
{
//code from helper class here
}
}
答案 1 :(得分:0)
我想了一些,然后提出了以下步骤。
使用实现创建和调用方法对象时,只需创建实现并调用模板方法。
新的MethodObject(d,who).template(new Implementation(d,who));
成为
Implementation impl = new Implementation(d, who);
impl.template(impl);