Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么设计模式适合将属性应用于更改其行为的类?_Java_Design Patterns - Fatal编程技术网

Java 什么设计模式适合将属性应用于更改其行为的类?

Java 什么设计模式适合将属性应用于更改其行为的类?,java,design-patterns,Java,Design Patterns,我正试图找到最好的方式来组织我的项目。我想做的是有一个由多个部分组成的结构。这些部分还将具有单独的属性,例如,它可以是旋转、悬停、振动、跳跃、抖动、增长、加速 举个例子,我可能有一个叫做“人”的结构,它由6个部分组成。我将把每个部分设置为一个可用选项,因此在本例中,两个部分是手臂,两个部分是腿,一个部分是躯干,一个部分是头部。现在,我希望能够将旋转属性应用于其中一个部分,手臂。所以现在我应该有一个手臂旋转的人 此外,我希望其他人能够创建自己的cusom属性、结构和部件 我想了解如何构造代码,并将

我正试图找到最好的方式来组织我的项目。我想做的是有一个由多个部分组成的结构。这些部分还将具有单独的属性,例如,它可以是旋转、悬停、振动、跳跃、抖动、增长、加速

举个例子,我可能有一个叫做“人”的结构,它由6个部分组成。我将把每个部分设置为一个可用选项,因此在本例中,两个部分是手臂,两个部分是腿,一个部分是躯干,一个部分是头部。现在,我希望能够将旋转属性应用于其中一个部分,手臂。所以现在我应该有一个手臂旋转的人

此外,我希望其他人能够创建自己的cusom属性、结构和部件


我想了解如何构造代码,并将属性应用于零件。此外,什么样的设计模式对这一点有好处?

要求为各种对象/组件的组合提供一个单一的接口

有两种适合此需求的设计模式

外观 复合对象 当必须抽象内部组件的组装方式时,可以使用Facade模式


当必须公布组件的组装时,可以使用复合对象模式。

这似乎只是关于组织抽象概念的纯oop,类似实体的东西,它可以是另一个实体的父对象。现在,可以命名这种关系,而不仅仅是父对象:类似实体->'contains'->实体的东西。属性也可以做同样的事情。如果您有“实体类型”,这些类型可以预定义属性。这可以使用数据建模,这将使其具有可扩展性。因此,结构应该包含包含属性数组的部件数组。每种类型的属性都有自己的构造函数?将属性定义为枚举{旋转,悬停,…}。枚举既可以有成员,也可以有getter。对于每个零件,创建零件具有的属性列表。客户机代码可以通过添加到此列表来设置每个零件的属性。或者,如果您愿意,可以使用映射,这样您就可以查找零件是否具有给定属性。@Lini这不起作用。枚举常量是静态的。setter方法将更改该常量所有用途的属性。@VGR,对,我更正了这一点。枚举只能有getter,并且不是动态的。