gpt4 book ai didi

java - 如何强制只有我的应用程序中的给定模块可以更改我的对象中的属性?

转载 作者:行者123 更新时间:2023-12-02 06:12:17 26 4
gpt4 key购买 nike

我有一个具有 State 属性的类。实例化时,该属性包含对象的当前状态。这些状态有一个明确定义的流程(例如:从状态 1 你只能进入状态 2 和 3。从 2 你只能进入状态 4 等等......),所以我打算在我的系统中创建一个模块将管理这些变化。理想情况下,它会接收对象和执行的操作,并设置新状态。我知道该怎么做,但我忽略了一点:如何强制每个人都使用这个模块来改变状态?我不希望任何其他人改变状态,只有这个模块。

有我可以使用的设计模式或面向对象的“技巧”吗?

我不知道这是否有用,但我正在使用 JAVA EE6。

最佳答案

从我的脑海中浮现出来:

 class A {

protected State state

public State getState(){ return state; }
}

class B extends A {

public void setState( State s ){ this.state = s }

}

因此该属性对于 A 类的所有用户来说保持只读状态,但如果将实例强制转换为 B,则该属性是可写的。

更新:

使用回调机制:

 interface StateChanger(){ 
public void call( State state );
}

class A {

protected State state

public State getState(){ return state; }

public void setState( StateChanger stateChanger ){
stateChanger.call( state );
}
}

然后你可以将其用作:

 classAInstance.setState( new StateChanger(){
@Override
public void call( State state ){
//do stuff
}
} );

也许您还需要在 StateChanger.call() 中包含 this 作为参数

在像 Groovy 这样的动态语言中,它看起来非常紧凑

关于java - 如何强制只有我的应用程序中的给定模块可以更改我的对象中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21780416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com