image.png
Iterator 模式:
1.概念:将循环变量 i 的作用抽象化、通用化后形成的模式;
2.用途:在数据集合中按照顺序遍历集合;
3.别名:迭代器;
image.png
/// <summary>
/// 聚合
/// </summary>
public interface IAggregate
{ /// <summary>
/// 迭代器
/// </summary>
/// <returns></returns>
IIterator Iterator();
}/// <summary>/// 迭代器/// </summary>public interface IIterator{ /// <summary>
/// 是否包含下一个
/// </summary>
/// <returns></returns>
bool HasNext(); /// <summary>
/// 下一个
/// </summary>
/// <returns></returns>
object Next();
} /// <summary>
/// 书
/// </summary>
public class Book
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; } public Book(string name)
{
Name = name;
}
}/// <summary>/// 书架/// </summary>public class BookShelf : IAggregate
{ private readonly List<Book> _books; public BookShelf()
{
_books = new List<Book>();
} /// <summary>
/// 迭代器
/// </summary>
/// <returns></returns>
public IIterator Iterator()
{ return new BookShelfIterator(this);
} /// <summary>
/// 获取图书
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public Book GetBookAt(int index)
{ return _books[index];
} /// <summary>
/// 添加图书
/// </summary>
/// <param name="book"></param>
public void AppendBook(Book book)
{
_books.Add(book);
} /// <summary>
/// 获取数量
/// </summary>
/// <returns></returns>
public int GetCount()
{ return _books.Count;
}
} class Program
{ static void Main(string[] args)
{ var bookShelf = new BookShelf();
bookShelf.AppendBook(new Book("Around the World in 80 Days"));
bookShelf.AppendBook(new Book("Bible"));
bookShelf.AppendBook(new Book("Cinderella"));
bookShelf.AppendBook(new Book("Daddy-Long-Legs")); var iterator = bookShelf.Iterator(); while (iterator.HasNext())
{ var book = (Book) iterator.Next();
Console.WriteLine(book.Name);
}
Console.Read();
}
}角色梳理
IIterator 迭代器
负责定义按顺序逐个遍历元素的接口。
ConcreteIterator 具体的迭代器
负责实现 Iterator 接口。
IAggregate 聚合接口
负责定义创建 IIterator 接口。
ConcreteAggregate 具体的集合
负责实现 IAggregate 的接口。
image.png
要点 & 思路
不管实现如何变化,都可以使用 IIterator
引入 IIterator 后可以将遍历与实现分离开来;
设计模式的作用就是帮助我们编写可服用的类。所谓“可复用”,就是指将类实现为“组件”,当一个组件发生改变时,不需要对其他的组件进行修改或是只需要很小的修改即可应对;
难以理解抽象类和接口
如果只使用具体的类来解决问题,很容易导致类之间的强耦合,这些类也难以作为组件被再次利用。为了弱化类之间的耦合,进而使得类更加容易作为组件被再次利用,我们需要引入抽象类和接口。
不要只使用具体类来编程,要有限使用抽象类和接口来编程。
相关模式
Visitor 模式
Iterator 模式是从集合中一个个取出元素进行遍历,但是并没有在 Iterator 接口中声明对取出的元素进行何种处理。Visitor 模式则是在遍历元素集合的过程中,对元素进行相同的处理。
Composite 模式
递归结构的模式。
Factory Method 模式
在创建迭代器时可能会使用工厂方法模式。
作者:oO反骨仔Oo
链接:https://www.jianshu.com/p/b78dab04463d
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦


