迭代器模式

迭代器模式

C#方法:

using DesignPattern.ChainofResponsibilityPattern;

using DesignPattern.IteratorPatttern;

using DesignPattern.MementoPattern;

using DesignPattern.ObserverPattern;

using DesignPattern.VisitorPattern;

using System;

using System.Collections.Generic;

namespace DesignPattern

{

internal class Program

{

static void Main(string[] args)

{

IteratorHelper();

}

#region Pattern - Iterator

static void IteratorHelper()

{

ObjectRepository _stringRepository = new ObjectRepository();

_stringRepository.AddObject("A");

_stringRepository.AddObject("B");

_stringRepository.AddObject("C");

_stringRepository.AddObject(11.ToString());

ObjectRepository _intRepository = new ObjectRepository();

_intRepository.AddObject(-1);

_intRepository.AddObject(10);

_intRepository.AddObject(20);

_intRepository.AddObject(30);

for (Iterator _iterator = _stringRepository.GetIterator(); _iterator.HasNext();)

{

Console.WriteLine("Object is: " + _iterator.Next());

}

Console.WriteLine("===================================================================");

for (Iterator _iterator = _intRepository.GetIterator(); _iterator.HasNext();)

{

Console.WriteLine("Object is: " + _iterator.Next());

}

Console.ReadLine();

#endregion

}

}

}

//=======================================================================================================

namespace DesignPattern.IteratorPatttern

{

///

/// 迭代器

///

public interface Iterator

{

bool HasNext();

T Next();

}

///

/// 容器集装箱

///

public interface IContainer

{

Iterator GetIterator();

}

///

/// 对象库

///

public class ObjectRepository : IContainer

{

ObjectIterator m_ObjectIterator;

public ObjectRepository()

{

m_ObjectIterator = new ObjectIterator();

}

public Iterator GetIterator()

{

return m_ObjectIterator;

}

public void AddObject(T obj)

{

m_ObjectIterator.m_ObjectRepository.Add(obj);

}

///

/// 对象迭代器

///

class ObjectIterator : Iterator

{

public ObjectIterator()

{

m_ObjectRepository = new List();

}

int index;

public List m_ObjectRepository;

public bool HasNext()

{

if (index < m_ObjectRepository.Count)

{

return true;

}

return false;

}

Tobjcet Iterator.Next()

{

if (HasNext())

{

return m_ObjectRepository[index++];

}

return default;

}

}

}

}王小黑 王小黑

841***494@qq.com

3年前 (2022-09-28)

💎 相关推荐