【问题标题】:Template design pattern for operations with parameters带参数操作的模板设计模式
【发布时间】:2015-02-26 12:48:30
【问题描述】:

模板设计模式让您可以设计一种算法,该算法可以通过覆盖一些模板方法来定制。

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

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

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

【问题讨论】:

    标签: design-patterns


    【解决方案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>
    {
        ...
    }
    

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

    【讨论】:

    • 啊哈,是的,应该是这样......如果需要某些属性,它将很容易包含在上下文中,而无需进行重大更改。谢谢兄弟
    猜你喜欢
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多