Skip to content

Instantly share code, notes, and snippets.

View SamStone92's full-sized avatar

Sam Stone SamStone92

  • Gloucester, UK
View GitHub Profile
employee.nextManagementLevel = boss
boss.nextManagementLevel = ceo
let employee = Employee()
let boss = Boss()
let ceo = CEO()
...
if expenditure.amount > 1001 && expenditure.amount < 10000 {
print("The CEO can approve this expenditure")
} else {
print("This expenditure is too large and won't get approved")
}
...
class Boss : Chain {
private var _nextManagementLevel : Chain?
var nextManagementLevel : Chain{
set{
_nextManagementLevel = newValue
}
get{
return _nextManagementLevel!
}
protocol Chain{
var nextManagementLevel : Chain{ get set }
func shouldApproveExpenditure(expenditure : Expenditure)
}
class Expenditure {
private var _amount = Int()
var amount : Int{
get{
return _amount
}
set {
_amount = newValue
let subject = Subject()
let binary = BinaryObserver(subject: subject, id: 1)
let octal = OctalObserver(subject: subject, id: 2)
let hex = HexaObserver(subject: subject, id: 3)
subject.number = 15
subject.removeObserver(observer: binary)
subject.number = 2
func removeObserver(observer : Observer) {
observerArray = observerArray.filter{ $0.id != observer.id }
}
let subject = Subject()
let binary = BinaryObserver(subject: subject, id: 1)
let octal = OctalObserver(subject: subject, id: 2)
let hex = HexaObserver(subject: subject, id: 3)
subject.number = 15
subject.number = 2
class BinaryObserver : Observer{
private var subject = Subject()
var id = Int()
init(subject : Subject, id : Int) {
self.subject = subject
self.subject.attachObserver(observer: self)
self.id = id
}