你会选择什么设计模式?

时间:2010-04-01 09:49:31

标签: c# java design-patterns class

我想设计一个类,其中包含一个实现目标的过程。 它必须遵循一些顺序,以确保最后一个方法,让我们说“ExecuteIt”,以正确行事。 在这种情况下,你会使用什么设计模式? 这可以确保用户必须按照某种顺序调用公共方法。

如果你真的不知道我在说什么,那么你能否分享一些选择设计模式的概念,或者在设计课程时你会考虑什么?

7 个答案:

答案 0 :(得分:6)

我相信你正在寻找Template Method模式。

答案 1 :(得分:4)

模板方法就是你想要的。它是最古老的,也就是组成课程的方式的正式化。

http://en.wikipedia.org/wiki/Template_method_pattern

或在此代码示例中:

abstract class AbstractParent // this is the template class
{
    // this is the template method that enforces an order of method execution
   final void executeIt()
   {
     doBefore(); // << to be implemented by subclasses
     doInTheMiddle() // also to be implemented by subclasses
     doLast(); // << the one you want to make sure gets executed last
   }

   abstract void doBefore();
   abstract void doInTheMiddle();
   final void doLast(){ .... }
}

class SubA extends AbstractParent
{
   void doBefore(){ ... does something ...}
   void doInTheMiddle(){ ... does something ...}
}

class SubB extends SubA
{
   void doBefore(){ ... does something different ...}
}

但似乎你正在寻找使用模式的机会,而不是使用模式来解决特定类型的问题。这只会导致你不良的软件开发习惯。

不要考虑模式。想想 如何在没有模式的情况下解决特定问题。

想象一下,没有编纂的模式(以前​​是这样的)。你将如何完成你想要做的事情(这是人们为解决这类问题所做的工作。)当你能做到这一点时,你就会更好地理解模式。

不要将它们用作饼干切割器。这是你想做的最后一件事。

答案 2 :(得分:3)

它基本上不是模式,但是:如果你想确定,代码/方法按特定顺序执行,使类只有一个公共方法,然后以正确的顺序调用非公共方法

答案 3 :(得分:3)

在任何API中强制执行特定步骤序列的简单实用方法是定义一组类(而不是仅仅一个类),使得每个下一个有效步骤都将从前一个派生的对象作为参数。步骤,即:

   Fuel   coal   = CoalMine.getCoal();
   Cooker stove  = new Cooker (gas); 

   Filling apple = new AppleFilling();
   Pie applePie = new Pie(apple);

   applePie.bake(stove);

也就是说,要烤一个馅饼,你需要提供一个Cooker对象,而这个对象又要求某种合适的燃料首先被实例化。同样地,在你获得一个Pie的实例之前,你需要准备一些Filling。

在这个实例中,API使用的语义由其语法明确强制执行。保持简单。

答案 4 :(得分:2)

我认为你不必真正执行任何事情,只需准备语句,资源和任何你想要的东西。 这样,无论用户调用方法的顺序如何,都可以确保订购实际执行;只是因为你可以在执行之前完全控制实际执行。

恕我直言模板方法与您的目标关系不大。

编辑: 更清楚。让你的类有一个公共方法执行,以及许多其他公共方法来告诉你的班级该做什么(何时这样做是你的责任而不是用户的责任);然后让一些私人方法完成真正的工作,一旦用户完成设置,它们将由您的Execute以正确的顺序调用。

为用户提供设置,保持自我执行的能力。他告诉你什么,你决定如何。

答案 5 :(得分:0)

作为一般概念,您应该选择一种模式作为标准问题的标准解决方案,因此,我同意 Oded “模板方法”似乎符合您的需求(但你解释的可能太少了)。 不要将模式用作“恋物癖”,你必须记住的是:

  1. 如何以标准方式解决问题?
  2. 有这种模式吗?
  3. 这是最简单的方法吗?

答案 6 :(得分:0)

如果您有类层次结构,并且基类在其公共模板方法中定义受保护的操作步骤,则模板方法是合理的。你能详细说明一下你的问题吗?