设计模式漫谈之迭代器模式

谈恋爱是两我的的事,结婚是两个家庭的事。最近事也挺多的。我也挺烦的,有时候,我也为本身的未来担心,我自认为本身的技术过硬,可是千里马只有遇到伯乐才能发挥做用。git

技术上让我高兴的事是,有个技术问题终于突破了,花了我1个多月时间惦记这事,终于我又花一天时间,不停的尝试,坚持,最后终于搞定了。主要是用IL语言操做实体取值赋值方法,彻底我的独立所完成。使用这种方法,个人开源底层框架效率会提高数倍。也是我开源框架的亮点。目前个人开源应用程序底层框架在码云托管平台上托管着,github上只留有最原始的操做数据库版本。至于这个项目何时公开,待之后再决定。目前还属于建设完善阶段。程序员

重要是事多说几遍,对象是具备空间的,空间是能够放东西的,若是这个东西是另外一个对象,那么放的是这个对象的引用。这样,两个对象就发生关系了,便可以访问的关系。github

迭代器模式就是操做集合的一个对象,既然能操做集合,确定存了集合的引用。集合的基类接口已经约束了,迭代集合对象。数据库

迭代器即一个对象操做另外一个对象。编程

直接上例子,我来解释设计模式

//抽象的描述了关系,未来的Aggregate存了Iterator 对象的引用,能够访问到Iterator 对象。框架

abstract class Aggregate
{
public abstract Iterator CreateIterator();
}ide

//具体对象this

class ConcreteAggregate : Aggregate
{设计

//对象空间中的集合
private IList<object> items = new List<object>();
public override Iterator CreateIterator()
{

//一样,生成的对象也存了宿主对象,即在ConcreteIterator这个对象中也能够访问到宿主对象
return new ConcreteIterator(this);
}

public int Count
{
get { return items.Count; }
}

//索引的方式操做对象中的集合

public object this[int index]
{
get { return items[index]; }
set { items.Insert(index, value); }
}
}

//迭代器抽象对象的约束

abstract class Iterator
{
public abstract object First();
public abstract object Next();
public abstract bool IsDone();
public abstract object CurrentItem();
}

 

//具体的迭代器对象

class ConcreteIterator : Iterator
{


private ConcreteAggregate aggregate;
private int current = 0;

//存了宿主对象的引用,能够访问到宿主对象

public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}

//都是访问宿主对象

public override object First()
{
return aggregate[0];
}

public override object Next()
{
object ret = null;
current++;

if (current < aggregate.Count)
{
ret = aggregate[current];
}

return ret;
}

public override object CurrentItem()
{
return aggregate[current];
}

public override bool IsDone()
{
return current >= aggregate.Count ? true : false;
}

}

//集合对象,还能够这样写

//Aggregate a = new ConcreteAggregate();

 

ConcreteAggregate a = new ConcreteAggregate();

a[0] = "大鸟";
a[1] = "小菜";
a[2] = "行李";
a[3] = "老外";
a[4] = "公交内部员工";
a[5] = "小偷";

//这个地方也能够这样写

//Iterator i = a.CreateIterator();

Iterator i = new ConcreteIterator(a);

object item = i.First();
while (!i.IsDone())
{
Console.WriteLine("{0} 请买车票!", i.CurrentItem());
i.Next();
}

总结:不要看设计模式,要看思想,这个迭代器模式的思想就是宿主能够访问其中对象,其中对象也能够访问宿主。

最近比较忙,这篇写了好几天,程序员最重要的就是工做态度,工做习惯,工做经验,编程思想。

玩面向对象都是在玩引用的,由于经过引用可让所关联的对象互相访问。

不说了,你们努力吧,我后天订婚。

相关文章
相关标签/搜索