java - GameManager 类型类的单一职责原则

标签 java oop

我想知道有人在考虑单一职责原则(SRP)的情况下如何证明创建 GameManager 的合理性。具体示例:内存游戏的 GameManager(带有您必须匹配的卡片)。它显然有很多职责:跟踪谁轮到了,在回合之间切换,跟踪游戏何时结束,谁是获胜者等等......

最佳答案

当对超出对象责任有疑问时。有一个与SRP相关的概念,cohesion ,这是相当客观的。在 Konamiman's answer ,GameManager 是 100% 内聚的。这意味着所有依赖项(实例字段)都在所有公共(public)方法中使用。

0% 则相反:

class GameManager {
   private int anInt;
   private object aObj;

   public void Foo() {
         // Do anything but using anInt or aObj
   }
}

如果您在对象内发现多个内聚组件:

class GameManager {
    private T1 obj1;
    private T2 obj2;

    public void Foo() {
       T1.F1();
    }

    public void Goo() {
       T2.G1();
    }
}

该类应分为两部分:

class GameManagerFoo {
    private T1 obj1;

    public void Foo() {
       T1.F1();
    }
}
class GameManagerGoo {

    public void Goo() {
       T2.G1();
    }
}

好点@Jackl56:关于属性 setter 和 getter ,您有两个选择。您可以不考虑它们,或者您可以认为它们降低了您的凝聚力,但达到了可接受的水平。

关于java - GameManager 类型类的单一职责原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23076120/

相关文章:

java - 在简单的嵌入式数据库中要保持什么内容以及要重新创建什么内容?

c# - 使用 using 或项目名称调用项目

Python 查询 - 可迭代的方法?

oop - 面向对象编程与函数式编程兼容吗?

python - 是否可以使用 python 中 __init__ 中的 self.variable 值初始化方法的参数?

java - 如何在 Java 中反转无符号字节的位?

Java - 具有不同对象类型的列表

java - 为什么okhttp3连接池使用Int.MAX_VALUE作为maximumPoolSize?

java - 如何在java中从mongodb中搜索不包含空值的数组?

java - 从 Java 中的基类访问子类字段