İçeriğe geç

State Pattern

Merhabalar bu yazımda State Pattern nasıl kullanılır bunu göreceğiz.

State (Durum) tasarım kalıbı işlevsel yararlı bir tasarım kalıbıdır. Durum geçişleri olan ve duruma göre işlemler yapmanız gereken modellerde kullanılır. Örnek verecek olursam otomatlardan bir yiyecek veya içeçek almak istediğimizde ilk parayı atıyoruz daha sonra ürünü seçiyoruz ve sonrasında makine bize ürünü verip alabilirsiniz diyor veya kahve makinelerindeki durumlarda aynı şekilde düşünülebilinir. Örnek dahada artırılabilir Kullanıcıların auth ve payment işlemleri vs.

Durum kontrollerini context yani ana sınıfında gerçekleştiririz. Client hiç bir şekilde durum kontrolu yapmaz sadece gerekli işlemleri yapar. Her bir durumunda temsil ettiği bir sınıf vardır bu sınıflarda aynı protokole bağlıdırlar.

Aşağıda yazdığım örneği inceleyebilir olayı daha iyi kavrayabilirsiniz.

protocol UserState {
    func handle(_ context: UserContext)
}


class Normal: UserState {
    func handle(_ context: UserContext) {
        
        print("Normal User Point:\(context.point)")
    }
}

class Gold: UserState {
    func handle(_ context: UserContext) {
 
        print("Gold User Activ.!!! Point:\(context.point)")
    }
}

class Platinium: UserState {
    func handle(_ context: UserContext) {
        print("Platinium User Activ.!!! Point:\(context.point)")
    }
}

class UserContext {
    
    var point:Int = 0
    
    private var _state:UserState
    
    var state:UserState {
        get {
            return self._state
        }
        set {
            self._state = newValue
            self._state.handle(self)
        }
    }
  
    init() {
        _state = Normal()
        _state.handle(self)
    }
    
    
    func addPoint() {
        point = point + 5
        controlPoint()
    }
    
    func controlPoint() {
        
        if point >= 20 {
            self.state = Platinium()
        } else if point >= 10 {
            self.state = Gold()
        }
    }
}

let context = UserContext()

context.addPoint() // Normal user
context.addPoint() // Gold user
context.addPoint() // Gold user
context.addPoint() // Platinium user

 

 

Tarih:Design PatternsiOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca