Skip to content

Instantly share code, notes, and snippets.

@tarikguney
Last active February 10, 2020 02:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tarikguney/f1373b3a3acede94f5a07bb8a86b72d8 to your computer and use it in GitHub Desktop.
Save tarikguney/f1373b3a3acede94f5a07bb8a86b72d8 to your computer and use it in GitHub Desktop.
Iterator Pattern Sample: Collecting money from briefcase
class Program {
static void Main(){
Canta paraDoluCanta = new Canta();
var zengin = new Yazilimci(paraDoluCanta) { Isim="Tosun", Yas=21 }
// Zengin birisi olarak, farkli ozelliklerimi farkli siniflar ile temsil ediyorum.
// Mesela para sayma ozelligim: ParaSayar, saldiri ozelligim: HizliVeOfkeli, vs.
// GetIterator() genelde standard bir isim. Onun icin kullandim. Geriye Iterator ustipinden ParaSayar tipini gonderiyor.
ParaSaymaIterator paraSayanOzelligim = zengin.GetIterator();
double toplamPara = 0;
// paraSayanOzellik ayni zamanda Cursor olarak calisiyor. Yani bir sonraki parayi getirirken, ayni zamanda hangi parada
// kaldigimi da biliyor.
while( paraSayanOzelligim.MoveNext() ){
Para para = paraSayanOzelligim.GetCurrent();
toplamPara += para.Miktar;
// 500 Dollars bir Dogan SLX
if(toplamPara >= 500){
break;
}
}
TofasGalerisi galery = new TofasGalerisi();
Tofas doganSLX = galery.VerParayiAlKarayi(toplamPara);
doganSLX.ArabayiKullan(2, "kilometre");
// Arkadaslarin tesellisi: 500 dolara tofas almissin, 2 kilometre iyi bile gitmis
doganSLX.BakimaGotur();
}
}
class Yazilimci {
public string Isim { get;set; }
public int Yas { get;set; }
private Canta _canta;
public Yazilimci(Canta paraDoluCanta) {
_canta = paraDoluCanta;
}
public ParaSaymaIterator GetIterator(){
var ozelligim = new ParaSaymaIterator(_canta);
return ozelligim;
}
}
class ParaSaymaIterator: IterateEden {
private Para[] _toplamPara;
public Para Current {get;set;}
private int _index;
public bool MoveNext(){
if(_index >= _toplamPara.Length){
return false;
// Iflas ettim lan.
}
Current = _toplamPara[_index++];
return true;
}
public ParaSayma(Canta birCataPara){
_toplamPara = birCantaPara.ParalariVer();
}
}
class Canta: IterateEdilen {
private Para[] _paralar;
public Canta() {
_paralar = _biryerlerdenParaGetir();
}
public Para[] TumParalariVer(){
return _paralar;
}
}
class Para {
public string Birim => "USD"
public double Miktar => 100
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment