C#'ta State Design Pattern

C#'ta State Design Pattern kullanımı

State Design Pattern, Behavioral patterns gurubunda yer alır.

Nesnenin durumunda oluşabilecek bir değişim nesnenin davranışlarını etkiliyor, davranışlar nesne durumuna göre değişim gösteriyorsa nesnenin davranışlarını nesnenin duruma göre değiştirmesi için state tasarım deseni kullanılır.

Context: Durumu izlenecek nesne.

State: Nesnenin tüm durumlar için arayüzü ortak şablonu. Abstract Class veya Interface

ConcreteState: Contex yapısının durumu davranışları.

Biz örneğimizde bir Printer cihazını ve duruma göre davranışlarını incelemeye çalışacağız.

namespace ConsoleApplication1

{

//State

abstract class PrinterState

{

public abstract void GetState(Printer context);

}


//Context class Printer

{

private PrinterState printerState; public PrinterState State

{

get

{

return printerState;

}

set

{

printerState = value; printerState.GetState(this);

}

}


public Printer()

{

State = new StatePrinterLoading();

}


public void PrintDocument(string documentPath)

{

Console.WriteLine("Yazdırılacak döküman geldi"); State = new StatePrinterBusy(); Console.WriteLine(documentPath + " yazdırıldı."); State = new StatePrinterReady();

}

}


//Concrete State

class StatePrinterLoading : PrinterState

{

public StatePrinterLoading()

{

Console.WriteLine("Printer Loading");

}


public override void GetState(Printer context)

{

Console.WriteLine("Printer Yüklendi Kullanıma Hazır"); context.State = new StatePrinterReady();

}

}


//Concrete State

class StatePrinterReady : PrinterState

{

public StatePrinterReady()

{

Console.WriteLine("Printer Ready");

}

public override void GetState(Printer context)

{

Console.WriteLine("Yeni Yazdırma İşlemi İsteği İçin

Bekliyor.");

}

}


//Concrete State

class StatePrinterBusy : PrinterState

{

public StatePrinterBusy()

{

Console.WriteLine("Printer Busy");

}

public override void GetState(Printer context)

{

Console.WriteLine("Printer Meşgul Yazdırma İşlemi Yapıyor.");

}

}


//Client class Program

{

static void Main(string[] args)

{

Console.WriteLine("Kitap.pdf dosyası yazdırılacak"); Printer printer = new Printer(); printer.PrintDocument("Kitap.pdf");

Console.Read();

}

}

}

Ekran Çıktısı

  • Kitap.pdf dosyası yazdırılacak Printer Loading
  • Printer Yüklendi Kullanıma Hazır Printer Ready
  • Yeni Yazdırma İşlemi İsteği İçin Bekliyor. Yazdırılacak döküman geldi
  • Printer Busy
  • Printer Meşgul Yazdırma İşlemi Yapıyor. Kitap.pdf yazdırıldı.
  • Printer Ready
  • Yeni Yazdırma İşlemi İsteği İçin Bekliyor.
Ozan Dalbudak
Merhaba,1995 doğumluyum. 2009 yılında lisede veritabanı Programcılığı bölümünü kazanarak kariyerime başlamış oldum. Daha sonra Selçuk Üniversitesi'nde Bilgisayar Mühendisliği okuyorum.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git