首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用模板方法模式

何时使用模板方法模式
EN

Stack Overflow用户
提问于 2010-07-18 02:26:58
回答 2查看 1.4K关注 0票数 2

嗨,我有一个问题,我必须在不同的数据集上执行类似的步骤/操作(略有不同)(数据在结构上也可能略有不同)。我需要执行几个步骤:连接、验证、构建错误消息(如果需要)、将数据结构更改为设置的格式并输出结果。

我正在研究模板方法模式,它看起来非常适合这一点--这听起来正确吗?或者有没有更好的方法来解决这种类型的问题?

我的目标是设计一种新的数据集可以轻松地添加到系统中,而不会中断任何东西,而且错误报告可以更改等,而不会对系统产生太大影响。

我正在使用php。

EN

回答 2

Stack Overflow用户

发布于 2010-07-18 02:30:16

模板方法在这里听起来很不错,但也要考虑策略When to use template method Vs. Strategy?

票数 1
EN

Stack Overflow用户

发布于 2010-07-18 02:50:58

策略方法与模板方法配合使用效果很好。

模板方法指定类的要求。策略方法允许您使用对象来定义行为,并在运行时使用依赖项注入来定义它们。

代码语言:javascript
复制
class CRUDTemplate
{
    protected $updater;
    protected $creator;
    protected $deletor;
    protected $loader;

    public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader)
    {
          $this->updater = $updater;
          //...snipped...
    }

    // sample template function; others are create, delete, update 
    public function load($id)
    {
          $this->content = $this->loader->load($id);
    }
}

虽然示例代码只显示了调用每个策略的模板函数,但可以在模板函数的专用重载版本中执行更多操作,例如验证输入、初始化等。毕竟,必须有一些东西叫做策略。

优点是,对于上面的示例,您可以针对不同的条件使用不同的策略集(CRUD可能不是最好的示例)。因此,如果您想要更改数据的输出方式,但保留其保存/创建/加载的方式,则只需更改输出策略即可。

缺点是你必须确保策略适用于正确的上下文,因为没有类型检查来确保你传递的策略是有效的(只要它是预期的基类,任何策略都可以工作)。哦,对了,CRUDTemplate也可以从基类派生。

对于数据,在PHP中,我发现数组最适合传递复杂的参数。当然,您必须对数组进行验证

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3272726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档