这是基于我在调度表上的另一篇文章中提出的切线替代方案。
在objective-c 面向对象设计中,假设我正在设计一个需要外部数据来执行的类。该类有许多变体,每个变体根据不同的外部数据在不同的时间以不同的方式执行。执行/实施此设计的最佳方式是什么?
作为一个具体的例子,假设该类代表一种医疗状况。有 100-200 种不同的医疗条件,每一种都会对不同的刺激作出反应,每一种一旦被触发就会做不同的事情。
我需要帮助的主要困难是如何传递每个变体在触发后执行所需的数据——无法封装的数据,以及不能简单地用作参数以输入到重写函数的数据因医疗状况的每一种变化而有所不同。
例如,当晒伤状况触发时,它需要传入的天气数据来确定严重程度。当失眠触发时,它需要最近服用其他药物的历史。消化不良需要消耗食物的重量。当然,触发点也不同,但我已经枚举了它并将其作为枚举值存储在我的超类中。问题是如何处理数据:我是否为任何子类可能需要的每个可能的输入进行子类化?或者使用像访客这样的设计模式?
谢谢你的帮助。
编辑:这是一个示例情况,我希望可以使我的问题更加具体:
一群病人被送进一个房间,每个人都有不同的 MedicalCondition(在我当前的代码中,我没有继承 MedicalCondition,我只称他们为不同的 NSString 名称)。这是患者的财产。然后,通过程序流程,对每个患者进行各种医学测试。MedicalTest 具有“int power”和“BOOL putsPatientToSleep”和“float chanceOfCausingFainting”等数据,并且从 MedicalTest 到 MedicalTest 也有很大差异。房间本身也具有 isSunny、isDark、fullOfContagiousPatients 等特性,这些特性成为我在 MedicalCondition 爆发时需要的数据。
现在,通过一系列测试,假设发生了一个事件,它是被测患者医疗状况的触发因素之一。假设它被称为 @"sunburn" MedicalTest 具有导致被测试患者的 MedicalCondition 激活的质量。从本质上讲,我的问题是,我在哪里以及如何编写 ExecuteWhenThisConditionFlaresUp(...输入从 MedicalCondition 到 MedicalCondition...) 的激活代码?例如,当晒伤患者的 MedicalCondition 着火时,我如何改变这种反应与寒战患者的反应?给定输入数据,我可以相当简单地编写函数,但问题是输入数据(即函数签名)会因条件而异,而且我还有 100 多个医疗条件做不同的事情,所以我不确定如果它' 将 MedicalCondition 子类化是正确的,只是为了在突发事件中具有不同的行为。有没有办法在objective-c中索引或存储函子?也许编写 100 个不同的函数,所有函数都具有不同的签名,但可以访问通用输入 NSArray,然后使用适当的 NSString 存储适当的函子?(只保留一个 MedicalCondition 类)