我希望设计一个包含实现目标的过程的类。为了确保最后一个方法“ExecuteIt”能正确执行,必须遵循一定的顺序。在这种情况下,您会使用什么设计模式?它可以确保用户按照某个顺序调用公共方法。
如果您真的不知道我在说什么,那么您可以分享一些选择设计模式的概念,或者在设计类时会考虑什么?
如果您真的不知道我在说什么,那么您可以分享一些选择设计模式的概念,或者在设计类时会考虑什么?
模板方法
模式。模板方法是您想要的。它是最古老的之一,仅仅是将类的组成方式形式化了。
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 ...}
}
但是看起来你正在寻找使用模式的机会,而不是使用模式来解决特定类型的问题。这只会导致糟糕的软件开发习惯。
不要考虑模式。考虑一下如果没有模式,你会如何解决这个特定的问题。
想象一下以前没有编码化的模式。你如何完成你想要做的事情(这就是人们解决这类问题的方法)。当你能够做到这一点时,你就会更好地理解模式。
不要把它们当作饼干切割器来使用。这是你最不想做的事情。
基本上这不是一个设计模式,而是:如果您想确保代码/方法按特定顺序执行,请使类仅具有一个公共方法,该方法然后按正确顺序调用非公共方法。
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使用的语义是由其语法明确强制执行的。保持简单。
如果你有一个类层次结构,并且基类在其公共模板方法中定义了受保护的操作步骤,那么模板方法是合理的。您能详细说明您的问题吗?