Wzór dekoratora w Swift

Feb 04 2023
Wzorzec Decorator w Swift umożliwia dynamiczne dodawanie dodatkowych funkcji do obiektu bez wpływu na zachowanie innych obiektów z tej samej klasy. Ten wzorzec jest często używany w programowaniu systemu iOS w celu dodawania niestandardowych zachowań do składników interfejsu użytkownika.

Wzorzec Decorator w Swift umożliwia dynamiczne dodawanie dodatkowych funkcji do obiektu bez wpływu na zachowanie innych obiektów z tej samej klasy. Ten wzorzec jest często używany w programowaniu systemu iOS w celu dodawania niestandardowych zachowań do składników interfejsu użytkownika.

Stworzyłem poniżej rzeczywisty przykład:

protocol LabelDecorator {
    func decorate(label: UILabel)
}

class ShadowDecorator: LabelDecorator {
    func decorate(label: UILabel) {
        label.layer.shadowOpacity = 0.5
        label.layer.shadowRadius = 3
        label.layer.shadowOffset = CGSize(width: 3, height: 3)
    }
}

class BorderDecorator: LabelDecorator {
    func decorate(label: UILabel) {
        label.layer.borderWidth = 2
        label.layer.borderColor = UIColor.black.cgColor
    }
}

class DecoratedLabel {
    let label: UILabel
    let decorators: [LabelDecorator]
    
    init(label: UILabel, decorators: [LabelDecorator] = []) {
        self.label = label
        self.decorators = decorators
    }
    
    func applyDecorators() {
        decorators.forEach { $0.decorate(label: label) }
    }
}

// Usage
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
label.text = "Hello, World!"

let decoratedLabel = DecoratedLabel(label: label, decorators: [ShadowDecorator(), BorderDecorator()])
decoratedLabel.applyDecorators()

śledź mnie na Twitterze, aby zapoznać się z tego rodzaju samouczkiem dotyczącym dzielenia się wiedzą.