1

有很多情况我希望

this=somevalue

在 Java 中是允许的。例如,当我在超类 Person 中并且我想将类型从 Person 修改为 Customer 时,分配如下

this=new Customer();

会有帮助的。想象一下,我有一个客户关系系统,我在其中保存了一个人员列表,我想根据他们的角色以不同的方式处理他们,但只允许一个主角色。所以一个人可以是客户、员工、朋友或......

所有人都以人的身份开始,但在任何时候他们都可以被“提升”为大师。稍后我可能想更改 Masterrole。

即使使用工厂、依赖注入等,如果不使用角色模式,似乎仍然很难获得有效的解决方案。

要获得对对象的引用可以由对象本身修改的预期效果,有什么好的解决方法?我的第一个想法是拥有一个 Wrapper 对象,它将所有访问权限委托给“真实对象”——真实对象实现了实体的接口,例如 Person。如果我知道要从 Person 转移到 Customer,则包装器会交换“真实”对象。有没有这些方面的解决方案?

4

2 回答 2

2

我猜你想要实现的不仅是更改 this 指针,而且是对实例的所有引用。所以使用包装器的方法似乎是要走的路。

于 2012-12-22T11:24:20.667 回答
0

有没有这些方面的解决方案?

是的。您的包装器想法是一种常见且可行的解决方案,通常称为状态模式。来自GoF

在状态模式中,对象将请求委托给代表其当前状态的状态对象。

于 2012-12-22T11:24:25.163 回答