状态模式:为什么上下文类不实现或继承State抽象接口/类?

Ric*_*ket 3 state design-patterns

我正在读关于状态模式.我刚刚开始,所以当然我首先阅读整篇维基百科的文章.

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

为什么这个上下文类没有专门"扩展"或"实现"通用的State基类/接口?

Pét*_*rök 5

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