迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而有不暴露起内部的表示。 【Head First design pattern】

下面来分析一个Demo:
这个就是"聚合对象中的元素"。
迭代器模式 Iterator  class ItemFir:IItem
    }

ClassA 中使用数组来存储“元素”。

迭代器模式 Iterator  class ClassA
    }

ClassB 中使用List来存储“元素”。
迭代器模式 Iterator  class ClassB
    }
ItemFlag 源码:
迭代器模式 Iteratorenum ItemFlag
    }

测试代码:
迭代器模式 Iterator  static void Main(string[] args)
}
我们希望把 ClassA 中和ClassB 中所有ItemFalg 值为LOW的元素选择出来。其实对于客户来说没必要知道你用数组还是list来保存的。客户需要用不同的方式来访问聚合,也显得不够优雅。( itemlistA.Length)还有像上面如果有10个类就得用十个循环。
现在我们看看用迭代器模式怎么做:

1.定义接口:
迭代器模式 Iterator interface IIterator
    }
2. 实现迭代器:
classA对应的迭代器。
迭代器模式 Iterator  class ClassAIterator : IIterator
    }
ClassB的迭代器:

    }
3.同时ClassA,ClassB 都继承与IClassA
迭代器模式 Iterator interface IClass
    }
4.的注释。


测试代码:
迭代器模式 Iterator   class Context
    }


迭代器模式 Iterator  static void Main(string[] args)
        }

然后有了迭代器,ClassA ,ClassB 中 GetAll这些方法可以去掉了。
在.net 2.0中完全可以不用这么麻烦,当然如果那么做就不能叫迭代器模式了。实现一个接口全部搞定。
ClassA,ClassB 直接实现接口 System.Collections.IEnumerable

迭代器模式 Iterator public IEnumerator GetEnumerator()
        }

相关文章:

  • 2021-12-01
  • 2022-12-23
猜你喜欢
  • 2022-01-15
  • 2021-05-24
相关资源
相似解决方案