【发布时间】:2010-09-12 17:10:45
【问题描述】:
我正在设计一个存储(缓存)一组数据的类。我想查找一个值,如果该类包含该值,则使用它并修改该类的属性。我很关心公共界面的设计。
以下是该类的使用方式:
但是我不想将 ClassItem 暴露给这个客户端(ClassItem 是 MyClass 的一个实现细节)。 为了解决这个问题,可以考虑以下几点:
bool found = myClass.Lookup(value); 如果(找到) { // 项目在类中找到,所以修改并使用它 myClass.ModifyAttribute(value, something); ... // 使用 myClass } 别的 { // 值在类中不存在,所以添加它 myClass.Add(value, something); }但是,这是低效的,因为 Modify 必须再次进行查找。这将建议使用 lookupAndModify 类型的方法:
bool found = myClass.LookupAndModify(value, something); 如果(找到) { // 项目在类中找到 ... // 使用 myClass } 别的 { // 值在类中不存在,所以添加它 myClass.Add(value, something); }但是将 LookupAndModify 整合到一种方法中似乎是非常糟糕的设计。它也只在找到值时进行修改,因此名称不仅麻烦而且容易误导。
还有其他更好的设计可以解决这个问题吗?任何设计模式(我无法通过谷歌找到任何东西)?
【问题讨论】:
标签: oop