Java的公共领域如何处理?

Java的公共领域如何处理?,第1张

Java的公共领域如何处理?

公共字段向对象的调用者公开对象的表示形式,即,如果必须更改表示形式,则调用者也必须进行更改。

通过封装表示,您可以强制调用者与之交互,并可以更改该表示,而无需修改调用者(只要公共api不变)。在任何不平凡的程序中,必须进行封装才能实现合理的可维护性。但是,当您需要胶囊时,它们的适当粒度可能大于单个类。例如,

Iterator
从其内部表示形式封装a几乎没有意义
Collection

顺便说一句,让我们看一下您的示例:

public class Point {    public int x;    public int y;    public Point(int x, int y){        this.x = x;        this.y = y;    }}

该类的内部表示形式极不可能更改,因此通过将字段设为私有来隐藏表示形式的结构没有任何好处。但是,

Point
一旦构造,我将阻止调用者对其进行修改:

public class Point {    public final int x;    public final int y;    public Point(int x, int y){        this.x = x;        this.y = y;    }}

因此,实际上希望封装其状态的类可以在

Point
不泄漏其内部表示的情况下返回其状态,并在其表示中使用给定的Point而不捕获它。这也与点的数学概念很好地吻合,该点没有身份或状态发生变化。

在设计程序时,玩游戏的特工需要访问董事会的状态(以便他们可以决定移动的方向)。他们还需要将此举动传递给游戏,以便可以将其确认为合法举动。在确定移动内容的过程中,将起点和终点归为威胁。

Board,Threat和Point对象实际上什么也没做。它们只是在那里存储可以以人类可读的方式访问的相关数据。

现在,这听起来像是在浪费封装的机会:确实不应允许代理商随意修改董事会,而只能采取法律行动。

Game
当要更新的状态驻留在班级中时,为什么由班级负责决定什么是合法举动
Board
?如果
Board
要验证招数本身,则没有任何调用者,尤其是没有代理,可以违反游戏规则:

public class Board {    // private fields with state    // public methods to query state    public void perform(Move move) throws IllegalMoveException;}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5586932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存