概要
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
类图
运行
代码
using System;
namespace 迭代器模式
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Client client = new Client();
client.main();
Console.ReadLine();
}
}
class Function
{
string function;
public Function(string fun)
{
this.function = fun;
}
public void exe()
{
Console.WriteLine(function);
}
}
class Item
{
public int index = 0;
public Item hou = null;
public Function data = null;
}
class Aggregate
{
private Item first = null;
private Item curent = null;
private Item last = null;
public void add(Function function) {
Item item = new Item();
item.data = function;
if (this.last == null)
{
this.last = item;
this.first = item;
}
else
{
this.last.hou = item;
this.last = item;
}
}
public void initCurent()
{
curent = first;
}
public Function getNext()
{
if(this.curent == null)
{
return null;
}
Function fun = this.curent.data;
this.curent = this.curent.hou;
return fun;
}
}
class Tank
{
Aggregate aggregate = new Aggregate();
public void exe()
{
bool flag = true;
this.aggregate.initCurent();
while (flag)
{
Function function = this.aggregate.getNext();
if(function != null)
{
function.exe();
}
else{
flag = false;
}
}
}
public void add(Function function)
{
aggregate.add(function);
}
}
class Client
{
public void main()
{
Tank tank = new Tank();
tank.add(new Function("射击"));
tank.add(new Function("跑"));
tank.add(new Function("红外瞄准"));
tank.exe();
}
}
}
代码优化
运行
代码
using System;
namespace 迭代器模式
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Client client = new Client();
client.main();
Console.ReadLine();
}
}
// 接口层
interface IFunction
{
void exe();
}
class Function: IFunction
{
string function;
public Function(string fun)
{
this.function = fun;
}
public void exe()
{
Console.WriteLine(function);
}
}
interface IAggregate
{
void add(IFunction function);
void initCurent();
IFunction getNext();
}
// 具体层
class Aggregate : IAggregate
{
class Item
{
public Item hou = null;
public IFunction data = null;
}
private Item first = null;
private Item curent = null;
private Item last = null;
public void add(IFunction function) {
Item item = new Item();
item.data = function;
if (this.last == null)
{
this.last = item;
this.first = item;
}
else
{
this.last.hou = item;
this.last = item;
}
}
public void initCurent()
{
curent = first;
}
public IFunction getNext()
{
if(this.curent == null)
{
return null;
}
IFunction fun = this.curent.data;
this.curent = this.curent.hou;
return fun;
}
}
class Tank : IFunction
{
Aggregate aggregate = new Aggregate();
public void exe()
{
bool flag = true;
this.aggregate.initCurent();
while (flag)
{
IFunction function = this.aggregate.getNext();
if(function != null)
{
function.exe();
}
else{
flag = false;
}
}
}
public void add(Function function)
{
aggregate.add(function);
}
}
// 客户端
class Client
{
public void main()
{
Tank tank = new Tank();
tank.add(new Function("射击"));
tank.add(new Function("跑"));
tank.add(new Function("红外瞄准"));
tank.exe();
}
}
}
附件信息
英语
template
n. 模板,样板 ;
method
n. 方法; 条理; 类函数; adj. 使用体验派表演方法的
primitive
adj. 原始的,远古的; 简单的,粗糙的; n. 原始人
operation
n. 操作; 经营; [外科] 手术; [数][计] 运算
concrete
adj. 混凝土的; 实在的,具体的; 有形的; vi. 凝结; vt. 使凝固; 用混凝土修筑;