我遇到了使用状态模式的问题,我不知道如何检查一个 State
是否是某个实例,但不能使用 instanceOf
(因为这被认为是一种不好的做法)。
TCPConnection
持有一个 TCPState
对象。假设我想获取所有具有状态 TCPEstablished
的 TCPConnections
,我该怎么做?
![enter image description here](https://istack.dev59.com/wZ0cI.webp)
一种方法是:
public List<TCPConnection> getAllEstablished() {
List<TCPConnection> list = new ArrayList<TCPConnection>();
for(TCPConnection tcp : allConnections) {
if(tcp.getState().instanceOf(TCPEstablished)) {
list.add(tcp);
}
}
return list;
}
但是这种方法使用了instanceOf
,我不想使用它。有更好的方法吗?或者我的使用instanceOf
是有效的吗?
enum
而不是类。 - Luiggi Mendozainstanceof
运算符没有问题。但是,使用方式在语法上是不正确的。instanceof
不是一个方法,而是一个运算符。 - Rohit Jaintcp.getState().instanceOf(TCPEstablished)
违反了迪米特法则。 - proskor