当前位置: 首页 > 知识库问答 >
问题:

有必要不修改作文吗?

叶明辉
2023-03-14

我在寻找在Java中实现聚合和合成的方法时遇到了这个答案。这是回答者对合成的实现-

final class Car {

  private final Engine engine;

  Car(EngineSpecs specs) {
    engine = new Engine(specs);
  }

  void move() {
    engine.work();
  }
}

我想问一下,是否必须将engine声明为private final才能成为有效的组合?构成是否也暗示了发动机的属性在其寿命内永远不变?

共有3个答案

谷梁襦宗
2023-03-14

虽然不变性是一个很好的设计目标,但它并不是组合被认为是“有效”的要求。

郗唯
2023-03-14

不。例如,一个策略模式可能允许策略在运行时是可切换的,并且该策略是在另一个(上下文)类中组成的。

不变是一个很好的模式,但有些情况允许和/或要求您改变组成。例如,当汽车爆炸时,你会如何更换发动机(上图)

臧令
2023-03-14

简短回答:

不!

长答案:

UML组合仅仅意味着复合实例的生命周期与其上级实例紧密耦合。因此,没有不允许交换或修改复合实例的约束。

但是记住聚合和合成的区别!

聚合:

    < li >主管-

组成:

  • 建筑-
 类似资料:
  • 打开conf/mvc/nutzbook-mvc-chain.js, 在ModuleProcessor后面加入一行 "org.nutz.integration.shiro.NutShiroProcessor", 最终效果 var chain={ "default" : { "ps" : [ "net.wendal.nu

  • 我在网上看到过minimax和alpha-beta修剪算法的实现。这些实现使用数组而不是树结构来生成可能的游戏动作。 有必要为这些算法创建一棵树,使用带节点的结构吗?为什么使用数组来存储游戏树?

  • 本文向大家介绍React为什么不要直接修改state?如果想修改怎么做?相关面试题,主要包含被问及React为什么不要直接修改state?如果想修改怎么做?时的应答技巧和注意事项,需要的朋友参考一下 不能直接修改state,组件修改state,并不会重新触发render. state的更新是异步的,调用setState时,组件state并不会立即改变,只是把要修改的状态放入事件队列当中. this

  • 问题内容: 我正在处理遗留代码,需要打补丁。 问题:古老的应用程序发送了错误的HTTP POST请求。参数之一不是URL编码。我知道这个参数总是排在最后,我知道它的名字。我现在正试图在运行在Tomcat中的服务器端修复它。 由于参数格式错误,因此无法通过HttpServletRequest的标准getParameter方法访问此参数。方法仅返回null。但是当我通过ServletInputStre

  • 主要内容:1. 使用fauxton更新(编辑)文档,2. CouchDB使用cURL工具更新文档在本篇文章中,我们来学习如何编辑/修改 CouchDB 数据库中的文档。编辑/修改 CouchDB 数据库中的文档有两种方法,下面分别来看看如何操作。 1. 使用fauxton更新(编辑)文档 打开Fauxton url:http://127.0.0.1:5984/_utils 在创建文档后,还可以更新/更改/编辑文档。首先打数据库概览,里边有文档列表,如下表所示 - 点击想要修改的文档,例如点击

  • Beautiful Soup的强项是文档树的搜索,但同时也可以方便的修改文档树 修改tag的名称和属性 在 Attributes 的章节中已经介绍过这个功能,但是再看一遍也无妨. 重命名一个tag,改变属性的值,添加或删除属性: soup = BeautifulSoup('<b>Extremely bold</b>') tag = soup.b tag.name = "blockquote" t