设计模式漫谈之迭代器模式
談戀愛(ài)是兩個(gè)人的事,結(jié)婚是兩個(gè)家庭的事。最近事也挺多的。我也挺煩的,有時(shí)候,我也為自己的將來(lái)?yè)?dān)憂,我自認(rèn)為自己的技術(shù)過(guò)硬,但是千里馬只有遇到伯樂(lè)才能發(fā)揮作用。
技術(shù)上讓我高興的事是,有個(gè)技術(shù)問(wèn)題終于突破了,花了我1個(gè)多月時(shí)間惦記這事,終于我又花一天時(shí)間,不停的嘗試,堅(jiān)持,最后終于搞定了。主要是用IL語(yǔ)言操作實(shí)體取值賦值方法,完全個(gè)人獨(dú)立所完成。使用這種方法,我的開(kāi)源底層框架效率會(huì)提升數(shù)倍。也是我開(kāi)源框架的亮點(diǎn)。目前我的開(kāi)源應(yīng)用程序底層框架在碼云托管平臺(tái)上托管著,github上只留有最原始的操作數(shù)據(jù)庫(kù)版本。至于這個(gè)項(xiàng)目什么時(shí)候公開(kāi),待以后再?zèng)Q定。目前還屬于建設(shè)完善階段。
重要是事多說(shuō)幾遍,對(duì)象是具有空間的,空間是可以放東西的,如果這個(gè)東西是另一個(gè)對(duì)象,那么放的是這個(gè)對(duì)象的引用。這樣,兩個(gè)對(duì)象就發(fā)生關(guān)系了,即可以訪問(wèn)的關(guān)系。
迭代器模式就是操作集合的一個(gè)對(duì)象,既然能操作集合,肯定存了集合的引用。集合的基類接口已經(jīng)約束了,迭代集合對(duì)象。
迭代器即一個(gè)對(duì)象操作另一個(gè)對(duì)象。
直接上例子,我來(lái)解釋
//抽象的描述了關(guān)系,將來(lái)的Aggregate存了Iterator 對(duì)象的引用,可以訪問(wèn)到Iterator 對(duì)象。
abstract class Aggregate
{
public abstract Iterator CreateIterator();
}
//具體對(duì)象
class ConcreteAggregate : Aggregate
{
//對(duì)象空間中的集合
private IList<object> items = new List<object>();
public override Iterator CreateIterator()
{
//同樣,生成的對(duì)象也存了宿主對(duì)象,即在ConcreteIterator這個(gè)對(duì)象中也可以訪問(wèn)到宿主對(duì)象
return new ConcreteIterator(this);
}
public int Count
{
get { return items.Count; }
}
//索引的方式操作對(duì)象中的集合
public object this[int index]
{
get { return items[index]; }
set { items.Insert(index, value); }
}
}
//迭代器抽象對(duì)象的約束
abstract class Iterator
{
public abstract object First();
public abstract object Next();
public abstract bool IsDone();
public abstract object CurrentItem();
}
?
//具體的迭代器對(duì)象
class ConcreteIterator : Iterator
{
private ConcreteAggregate aggregate;
private int current = 0;
//存了宿主對(duì)象的引用,可以訪問(wèn)到宿主對(duì)象
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}
//都是訪問(wèn)宿主對(duì)象
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;
}
}
//集合對(duì)象,還可以這樣寫(xiě)
//Aggregate?a = new ConcreteAggregate();
?
ConcreteAggregate a = new ConcreteAggregate();
a[0] = "大鳥(niǎo)";
a[1] = "小菜";
a[2] = "行李";
a[3] = "老外";
a[4] = "公交內(nèi)部員工";
a[5] = "小偷";
//這個(gè)地方也可以這樣寫(xiě)
//Iterator i =?a.CreateIterator();
Iterator i = new ConcreteIterator(a);
object item = i.First();
while (!i.IsDone())
{
Console.WriteLine("{0} 請(qǐng)買(mǎi)車票!", i.CurrentItem());
i.Next();
}
總結(jié):不要看設(shè)計(jì)模式,要看思想,這個(gè)迭代器模式的思想就是宿主可以訪問(wèn)其中對(duì)象,其中對(duì)象也可以訪問(wèn)宿主。
最近比較忙,這篇寫(xiě)了好幾天,程序員最重要的就是工作態(tài)度,工作習(xí)慣,工作經(jīng)驗(yàn),編程思想。
玩面向?qū)ο蠖际窃谕嬉玫?#xff0c;因?yàn)橥ㄟ^(guò)引用可以讓所關(guān)聯(lián)的對(duì)象互相訪問(wèn)。
不說(shuō)了,大家努力吧,我后天訂婚。
轉(zhuǎn)載于:https://www.cnblogs.com/wang-charle/p/9236127.html
總結(jié)
以上是生活随笔為你收集整理的设计模式漫谈之迭代器模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 快速排序--Python实现
- 下一篇: Spring Boot Admin 2