gpt4 book ai didi

java - 具有内部对象实例化的组合最佳实践

转载 作者:行者123 更新时间:2023-11-30 03:11:18 25 4
gpt4 key购买 nike

我正在摆弄作文并有一个问题。假设我有一个 FruitApple 类,其中 apple 是水果的传递

public class Apple {
Fruit fruit;
}

Fruit 有很多成员字段,例如 skincolor 等。当我们实例化 Apple 对象时,最佳实践是什么?我是否应该在内部构造 fruit 对象而不暴露任何 Apple 包含 Fruit 对象的指示?即,在构造 Apple 对象时,我调用 apple.setColor() 来在内部设置fruit.setColor() 属性。或者,我应该构造完整的 fruit 对象,并在 apple 实例化期间传入完全构造的 fruit 对象吗?

最佳答案

这实际上取决于您如何对问题进行建模。但我认为关注 OOP 的封装原则会对我们有所帮助。封装希望我们将有关对象的信息隐藏在其内部,或者换句话说,让每个对象负责执行自己的操作。

回到你的问题,首先让我们考虑 Fruit 对象只是一个底层数据结构的情况(即 Apple 对象是 Fruit 职责的完整超集)。在这种情况下,如果您要求开发人员为您构建 Fruit 对象并将其传递,您就暴露了您的内部职责,并且可能会让开发人员访问不需要的数据或行为。

Fruit f = new Fruit();
f.doSomethingPrivate(); // This is not intended for an Apple to be set externally

Apple a = new Apple(f); // Now the Fruit object may not comply with Apple definition

现在很明显,在某些情况下,上面的示例正是您想要做的事情。现在考虑组合模式(参见 here )。在组合中,您有一个容器,预计它不会封装其所包含元素的职责。

一个非常简单的例子是大学类(class),一些学生注册并有一名讲师:

public class Course {
private Person instructor;
private Person[] students;
}

在这里,Course 对象不负责暴露教师或学生的行为。相反,容器对象可能具有 getInstructor()setInstructor() 方法,并让开发人员决定组合中包含的元素。

关于java - 具有内部对象实例化的组合最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33588685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com