重构与许多不同类型一起工作的树控制器
本文关键字:控制器 工作 一起 许多不 同类型 重构 | 更新日期: 2023-09-27 17:51:04
我正在重构一个处理树的类(Controller)。因为树中有许多不同的类型(大约20个)。它通常使用以下结构来处理插入:
- 确定对象的类型
-
做一些特定类型的事情,并插入对象到树
public void AddChildren(Animal animal) { var cat = animal as Cat; if (cat != null) { AddCat(cat); return; } var dog = animal as Dog; if (dog != null) { AddDog(dog); return; } } public void AddCat(Cat cat) { //do some cat specific things //add to tree }
因此,用于确定对象类型的逻辑在类中的许多地方使用。是否有一种好的方法将这些逻辑集中在一个地方?
您可能希望使用策略(GoF)模式:
http://en.wikipedia.org/wiki/Strategy_pattern- 用方法addToTree(Tree Tree)创建接口LivingAnimal
- 在Cat、Dog等对象中实现此接口在<<li> em>猫。addToTree(Tree Tree)(和其他对象),做你的猫特定的东西,并将自己添加到树( Tree .add(this)) 在你的控制器中,创建一个方法addChildren(LivingAnimal p)。这个方法找到正确的对象类型(猫,狗等),并在其上调用addToTree(tree)。
当您使用策略(GoF)时,您将责任委托给正确的对象。在这种情况下,您将简化您的控制器并保持各种对象的高度内聚。