2014-12-30 36 views
0

模板设计模式可让您设计可通过重写某些模板方法来自定义的算法。具有参数操作的模板设计模式

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

prepareTeaBag()可以返回任意茶包来定制茶叶。

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

回答

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中定义的公共属性,并且所需的任何特定处理都将出现在相应的子类中。

+0

aha,是的,应该是这样的......如果需要某些属性,它将很容易包含在上下文中,而不会发生重大变化。多谢兄弟 – blackuprise