2010-05-28 30 views
3

我在读国家模式。我刚刚开始,所以当然我首先阅读上面的整个Wikipedia article状态模式:为什么上下文类没有实现或继承状态抽象接口/类?

我注意到,这篇文章中的两个例子都有一些基本的抽象类或Java接口,用于泛型状态的方法/函数。然后有一些状态从基础继承,并以不同的方式实现这些方法/功能。然后有一个Context类,它有一个State类型的私有成员,并且在任何时候都可以等于其中一个实现的一个实例。该上下文类也实现了相同的方法,并将它们传递到当前的状态实例,然后有一个额外的方法来改变状态(或者根据设计我知道状态的改变可能是对实现方法之一的反应) 。

为什么这个上下文类没有具体“扩展”或“实现”通用状态基类/接口?

回答

5

因为状态是实现细节,而不是其接口的一部分。即上下文不是一个国家,它只有一个国家。 Context的用户甚至不需要知道它有状态。

+0

听起来不错。这纯粹是概念性的。肯定是有道理的,我有这种感觉,但我想我只是需要从别人那里听到它。 :) – Ricket 2010-05-28 19:04:02

+1

@Ricket,还有一点需要注意:尽管维基百科的例子显示Context具有与State相同的接口,但IMO并不是该模式的固有部分 - 接口可能稍微甚至完全不同。 – 2010-05-28 19:27:03

+0

@Ricket也有一个实际的好处 - 'Context'接口可以比'State'接口简单(如State/StateContext的例子)。 – 2010-05-28 19:32:10