我在寻找在Java中实现聚合和合成的方法时遇到了这个答案。这是回答者对合成的实现-
final class Car {
private final Engine engine;
Car(EngineSpecs specs) {
engine = new Engine(specs);
}
void move() {
engine.work();
}
}
我想问一下,是否必须将engine声明为private final才能成为有效的组合?构成是否也暗示了发动机的属性在其寿命内永远不变?
虽然不变性是一个很好的设计目标,但它并不是组合被认为是“有效”的要求。
不。例如,一个策略模式可能允许策略在运行时是可切换的,并且该策略是在另一个(上下文)类中组成的。
不变是一个很好的模式,但有些情况允许和/或要求您改变组成。例如,当汽车爆炸时,你会如何更换发动机(上图)
简短回答:
不!
长答案:
UML组合仅仅意味着复合实例的生命周期与其上级实例紧密耦合。因此,没有不允许交换或修改复合实例的约束。
但是记住聚合和合成的区别!
聚合:
组成:
打开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
我需要编译一个C项目,它将使用项目中的外部库和头来进行线性规划。它包含两个部分。cpp文件。主要文件,主要农民,取决于pm。H PM. h具有主农场主调用COIN-OR函数所需的所有包含行。这是pm. h的代码: 我有一个由我的老师提供的makefile,并根据自己的需要进行了修改,但每当我试图通过运行makefile来编译项目时,我都会遇到相同的错误: 在文件包含从main-farmer.cpp
问题内容: 我正在处理遗留代码,需要打补丁。 问题:古老的应用程序发送了错误的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 在创建文档后,还可以更新/更改/编辑文档。首先打数据库概览,里边有文档列表,如下表所示 - 点击想要修改的文档,例如点击