嗨,我有这样的情况;
我的设计中有不同的项目,所有这些项目对角色都有一些特定的影响。每个项目都有一个apply函数,因此它可以使用Character对象并更改其功能。但是如果我改变了Character函数,我将不得不根据它改变所有的Item类。
如何有效地解耦项目和角色?
我将使用的语言是C ++,我不知道Item和Character类中的其他变量和函数。我只是想把它们分开。
答案 0 :(得分:0)
您可以引入Character
将继承的接口(C ++中的抽象类)。我们称之为ItemUser
。将更改Item#apply
签名,以便使用ItemUser
而不是Character
的对象。现在,只要尊重Character
合同,您就可以自由更改ItemUser
的实施。
答案 1 :(得分:0)
答案 2 :(得分:0)
根据我从阅读你的问题中所理解的是:你有多个Item类,每个类都有效果。屈服于Item对象类型的效果应用于另一个Character实体。现在你的问题是每当Character类发生变化时你的Item类也需要改变,你想要一种更简洁的方法来避免这种情况。
处理变更的一个好方法是定义不太容易改变的明确定义的合同。例如,如果我们有一个添加两个整数的功能,之后我们可能会进行更改,以便我们需要添加两个浮点数,之后我们可能需要用乘法替换add操作。在这种情况下,您可以定义抽象计算(INum num1,INum num2):INum作为返回类型。这里INum是类型的抽象,Compute是函数行为的抽象。实际实现定义了INum和Compute。现在使用我们的代码的代码只取决于抽象,我们可以自由地修改操作和实际类型,而不会影响用户代码。
在实施合同时,您可以修改内部实施,而不会影响使用合同的外部代码。
您可以定义抽象类ICharacter。对于某些类型可以在以后更改的属性,您可以使用模板和泛型,或者只是为属性类型创建接口,并让具体类型实现接口。用接口引用所有字段。让ICharacter定义公共抽象方法,其参数类型为Interfaces,返回类型也为Interfaces。
让Item类使用ICharacter,当你需要根据item类应用效果时,只需使用定义的常量抽象函数。您的角色内部修改现在可以更改而不会影响Item类。