use*_*480 7 oop design-patterns
假设通过一些关系有两个相互关联的类.例如,a Student维护Class他所采用的es 的列表,每个Class都有一个Students 列表.然后我害怕让Student直接能够修改它的Classes 集合,因为每次修改都必须跟着Class对s列表的类似修改,Student反之亦然.
一个解决方案是建立一个类,其唯一目的是跟踪Class- Student关系,比方说Registrar.但是,如果某些方法Student需要知道其Class列表,则Student需要通过Registrar.这看起来很糟糕.它似乎Student不应该访问Registrar,它也可以访问其他Students.我可以想到一个解决方案,创建一个类作为中间人之间的中介,Student并且只Registrar显示Student它需要知道的内容,但这似乎有点过分.另一种解决方案是从Student任何需要访问其类的方法中删除,并将其放入Registrar或有权访问的其他类中Registrar.
我问的原因是我正在用Java开展国际象棋比赛.我正在考虑Piece-Cell关系和Piece-Player关系.如果在上面的示例中,对于Student访问权限是不行的Registrar,是否Piece可以访问该权限Board,因为Piece无论如何需要环顾四周以确定移动是否有效?
在这种情况下,标准做法是什么?
如果关系可以改变——类应该尽可能地解耦,所以在每个类创建一个接口的同时,不要在类之间引入绑定关系。您可以使用封装类之间通信逻辑的中间服务/帮助程序来实现高级别的分离,因此在这种情况下,您不应该将一个类注入另一个类,即使两者都是由接口抽象的,基本上Student不了解任何内容Class,并且Class不知道了解任何关于Student. 我不确定这种复杂性对于您的情况是否有意义,但无论如何您可以实现它。
这里你可能会发现一个有用的设计模式Mediator,它可以封装两个解耦实体之间的交互逻辑,看看它。
使用中介者模式,对象之间的通信由中介者对象封装。对象之间不再直接通信,而是通过中介者进行通信。这减少了通信对象之间的依赖性,从而降低了耦合。