我正在读关于状态模式。我刚刚开始,所以当然我开始阅读整个Wikipedia article。
我注意到本文中的两个示例都有一些基本抽象类或Java接口,用于通用State的方法/函数。然后有一些状态从基础继承并以不同的方式实现这些方法/功能。然后是一个Context类,它有一个State类型的私有成员,并且在任何时候都可以等于其中一个实现的实例。该上下文类也实现了相同的方法,并将它们传递给当前的状态实例,然后有一个额外的方法来改变状态(或者根据设计,我理解状态的改变可能是对其中一个实现的方法的反应)
为什么这个上下文类没有专门“扩展”或“实现”通用的State基类/接口?
答案 0 :(得分:5)
因为状态是实现细节,而不是其接口的一部分。即Context 不是状态,只有有状态。 Context用户甚至不需要知道它有状态。
答案 1 :(得分:0)
根据GOF,它的字面意思是:
'上下文可以将自身作为参数传递给处理请求的State对象。这使State对象可以在必要时访问上下文。”
以TCPConnection / TCPState示例为例,TCPState拥有对TCPConnection的具体引用。
因此,更抽象的是,具体状态可以保存对具体状态上下文对象的引用,以设置新状态。但是我也看到Subject / Observer用于状态更新,而不是使用StateContext-> setState(State)。
我还看到人们有StateContext为特定于域的接口实现State接口。