重构树控制器,适用于许多不同类型

时间:2014-03-20 15:04:25

标签: c# tree refactoring

我正在重构一个处理树的类(Controller)。因为树中有许多不同的类型(大约20个)。它通常使用以下结构来处理例如插入:

  1. 确定对象的类型
  2. 做一些特定类型的事情并将对象插入树

    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
    }
    
  3. 因此,确定对象类型的逻辑在类中的许多地方使用。是否有一种很好的方法可以将这种逻辑集中在一个地方?

1 个答案:

答案 0 :(得分:1)

您可能想要使用策略(GoF)模式:

http://en.wikipedia.org/wiki/Strategy_pattern

  1. 使用方法 addToTree(树状树)创建接口 LivingAnimal
  2. 在对象 Cat Dog 等中实现此界面。
  3. Cat.addToTree(树状树)(和其他对象)中,做你的猫特定的东西,然后在树中添加自己( tree.add(this)
  4. 在控制器中,创建方法 addChildren(LivingAnimal p)。此方法找到正确类型的对象(Cat,Dog等),并在其上调用 addToTree(树)
  5. 当您使用策略(GoF)时,您将责任委派给正确的对象。在这种情况下,您将简化控制器并在各种对象上保持高凝聚力。