带参数的操作的模板设计模式

时间:2014-12-30 10:46:20

标签: design-patterns

模板设计模式允许您设计一种算法,可以通过覆盖一些模板方法来自定义。

class Algorithm {
    protected void init();
    protected void prepareCup();
    protected TeaBag prepareTeaBag();
    protected void boilWater();
    protected void putWaterIntoCup();
}

prepareTeaBag()可以返回任意茶袋来制作定制茶。

但是,如果我有一个算法需要一些操作参数,例如茶包的名称,以及一些其他属性正在被改变为每个操作。我可以将这些属性作为类成员保存到类中,但这样我就无法从不同的线程调用它。我需要传递一些Context类,它会根据操作而改变,以便允许多线程访问,或者你对此有何看法?

1 个答案:

答案 0 :(得分:1)

在之前的项目中,我们将模板模式与上下文对象一起使用,如下所示:

abstract class AbstractInvoiceSweep<T extends SweepContext>
{
    public void doSweep(T context);
    protected void calculateTaxes(T context);
    protected void processLines(T context);
    protected void processMemos(T context);
}

class NormalInvoiceSweep extends AbstractInvoiceSweep<SweepContext>
{
    .... 
}

class PrepadiInvoiceSweep extends AbstractInvoiceSweep<PrepaidSweepContext>
{
    ...
}

class SCRInvoiceSweep extends AbstractInvoiceSweep<SCRSweepContext>
{
    ...
}

扫描用户将根据他们正在处理的发票类型知道要准备的上下文对象的类型。 AbstractInvoiceSweep中的方法使用SweepContext中定义的公共属性,所需的任何特定处理都将出现在相应的子类中。