重构与许多不同类型一起工作的树控制器

本文关键字:控制器 工作 一起 许多不 同类型 重构 | 更新日期: 2023-09-27 17:51:04

我正在重构一个处理树的类(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
    }
    

因此,用于确定对象类型的逻辑在类中的许多地方使用。是否有一种好的方法将这些逻辑集中在一个地方?

重构与许多不同类型一起工作的树控制器

您可能希望使用策略(GoF)模式:

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

  1. 用方法addToTree(Tree Tree)创建接口LivingAnimal
  2. CatDog等对象中实现此接口在<<li> em>猫。addToTree(Tree Tree)(和其他对象),做你的猫特定的东西,并将自己添加到树( Tree .add(this))
  3. 在你的控制器中,创建一个方法addChildren(LivingAnimal p)。这个方法找到正确的对象类型(猫,狗等),并在其上调用addToTree(tree)

当您使用策略(GoF)时,您将责任委托给正确的对象。在这种情况下,您将简化您的控制器并保持各种对象的高度内聚。