java - 代码可读性/习惯做法/设计模式?

标签 java design-patterns code-readability

我一直在分析一些类,可以总结如下:

public class RulerFather {
    private Girl girl;
    private Pet  pet;

    public  RulerFather()
    {
        girl = new Girl(this);
        pet  = new Pet(this);
    }

    /*
     *  allowed messages between Girl and Pet   
     */
    public feedPet()
    {
        pet.receiveFood();
    }

    public lickGirl()
    {
        girl.beLicked();
    }
}
public class Girl {
    Father father;
    public Girl(Father father)
    {
        this.father = father;
    }
...

父亲实例化女孩和宠物,并定义允许交换的消息。 例如。在 Girl 的代码中,她可以通过以下方式喂养宠物(向宠物发送消息):

father.feedPet();

我的意思是,父亲创建的对象可以交换消息,但只能使用父亲提供的方法,因此父亲是一种“统治者”,定义允许它们之间交换哪些方法(在该交互级别)。

我的问题是,在我分析的代码中,我看到上面提到的方法和另一种方法的混合,这种方法只是将女孩和宠物的引用公开而不是私有(private)(这会导致自由和一些困惑,因为女孩可以称之为pet 的任何方法,以某种方式 RulerFather 定义了在 RulerFather 创建的对象范围内女孩和宠物之间的许多有效交互。

这与任何推荐的编码实践相关吗? (或者甚至是我不知道的设计模式?)

最佳答案

这是一种有趣的方法,尽管会导致几个问题:

  • 循环依赖:父类知道两个子类,反之亦然。所以这三个人组成了一个非常奇怪的三角形
  • 隐式耦合:女孩类知道有一个可能养宠物的父亲

然而,这是减少接口(interface)的一种方法。有时,您最终会得到无法更改的遗留类,但它们为新用途提供了太多方法。然后您需要一种合理的方式来提供缩小“范围”的 View 。但该方法通过某种方式复制代码来工作:父类定义了它完全自己的接口(interface)!

除此之外,我不知道这里有什么特定的模式。

为了缓解我提到的问题,您肯定会考虑使用接口(interface)。所以所有的类都应该实现自己的接口(interface),并且没有实现类知道其他实现类的任何信息。也许唯一的异常(exception)是代码必须知道要为不同的接口(interface)类型实例化哪些 impl 类。

关于java - 代码可读性/习惯做法/设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973495/

相关文章:

java - java中的集合可以在场景生成器中消失

design-patterns - 使用多个提供程序的客户端应用程序应使用哪种设计/模式?

c++ - 关于输入参数的顺序

java - 在哪里测试父类(super class)的默认方法实现

.net - 格式化 LINQ 查询的最佳方法

java - Java中通用括号之间没有空格的推理

java - 不同java服务中密封对象的加密和解密抛出classNotFoundException

java - Java中SCTP发送消息异常

java - 带 Button 按钮参数的方法

java - 使用多个数据库模式