Junior
Milliseid disainimustreid teate?
sobes.tech AI
Vastus AI-lt
Loojad:
- Singleton: Tagab, et klassil on ainult üks eksemplar ja pakub sellele globaalset juurdepääsu.
- Factory Method: Määratleb liidese objekti loomiseks, kuid võimaldab alamsüsteemidel otsustada, millist klassi luua.
- Abstract Factory: Pakub liidest seotud või sõltuvate objektide perekondade loomiseks, mitte määratledes nende konkreetseid klasse.
- Builder: Jagab keeruka objekti ehitamise sammudeks, võimaldades luua erinevaid esitlusi sama ehitusprotsessi kasutades.
- Prototype: Loob objekte, dubleerides olemasoleva eksemplari, mitte korrates ehitusprotsessi.
Struktuursed:
- Adapter: Muudab ühe klassi liidese teiseks, mida kliendid ootavad. Võimaldab töötada mittesobivate liidestega.
- Bridge: Eraldab abstraktsiooni selle teostusest, võimaldades neil muutuda sõltumatult.
- Composite: Koondab objekte puustruktuurides, et esitada "osa-täis" hierarhiaid. Võimaldab klientidel töötada ühtemoodi üksikute objektide ja nende kogumitega.
- Decorator: Dynaamiliselt lisab objektile uusi vastutusi, mähkides selle spetsiaalsesse dekoratiivobjekti.
- Facade: Pakub ühtset liidest alam-süsteemi liidestele. Määratleb kõrgema taseme liidese, mis lihtsustab alam-süsteemi kasutamist.
- Flyweight: Kasutab jagatud olekut paljude väikeste objektide vahel, et vähendada mälu kasutust ja suurendada jõudlust.
- Proxy: Pakub asendajat objekti, mis haldab juurdepääsu algsele objektile.
Käitumuslikud:
- Chain of Responsibility: Edastab taotluse vastutuse ahelasse. Iga ahela liige otsustab, kas töödelda taotlust või edasi saata selle järgmisele.
- Command: Inkapsuleerib taotluse objektina, võimaldades erinevatel klientidel taotlusi parametriseerida, järjekorda panna või logida.
- Interpreter: Määratleb keele grammatika esituse ja sisaldab tõlgendajat taotluste tõlgendamiseks.
- Iterator: Pakub viisi järjestikuseks juurdepääsuks kõigile koostiselementidele, ilma nende sisemist esitlust avaldamata.
- Mediator: Määratleb objektid, mis haldavad teiste objektide vahelist suhtlust. Edendab nõrka sidet, võimaldades objektidel suhelda ilma otsese viiteta.
- Memento: Pakub võimalust salvestada ja taastada objekti sisemine seisund, rikkumata kapseldamist.
- Observer: Määratleb "üks mitmesse" sõltuvuse objektide vahel, nii et ühe objekti seisundi muutmisel teavitatakse kõiki sõltuvaid objekte ja neid automaatselt uuendatakse.
- State: Annab objektile võimaluse muuta oma käitumist sõltuvalt selle sisemisest olekust. Iga olek on kapseldatud eraldi klassi.
- Strategy: Määratleb algoritmide perekonna, inkapsuleerib igaühe ja muudab need vahetatavaks. Võimaldab valida algoritmi jooksvalt.
- Template Method: Määratleb algoritmi raami operatsioonis, jätnud mõned sammud alamsüsteemidele. Annab alamsüsteemidele võimaluse määratleda algoritmi sammud ilma selle struktuuri muutmata.
- Visitor: Esindab operatsiooni, mis peab olema tehtud objektide struktuuri elementidel. Võimaldab määratleda uusi operatsioone ilma elementide klasside muutmiseta.
Samuti sageli kasutatav iOS arenduses:
- Model-View-Controller (MVC): Arhitektuurimuster, mis jagab rakenduse kolme seotud komponendiks: Mudel (andmed ja äriloogika), Vaade (kasutajaliides) ja Kontroller (suhtlus Mudeli ja Vaate vahel).
- Delegate: Annab ühele objektile õiguse tegutseda teise nimel või koordineerida teiste objektide tegevusi.
- Observer (NotificationCenter): Teavitussüsteem, mis võimaldab objektidel saada sõnumeid ilma otsese ühenduseta.
- Target-Action: Mehhanism, mida kasutatakse sõnumite saatmiseks juhtimise elementidelt (näiteks nuppudelt) sihtobjektile.
- Coordinator: Navigatsioonivoogude haldamise muster, mis eraldab navigatsiooni loogika kontrollijatest.
- Dependency Injection: Muster, kus objekti sõltuvused sisestatakse väljastpoolt, mitte ei loo neid ise.
// Singleton näide
class SettingsManager {
static let shared = SettingsManager() // Üks eksemplar
private init() {
// Privaatne initsialiseerija, et vältida väljastpoolt loomist
}
var appVersion: String {
return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Tundmatu"
}
}
// Kasutamine
let settings = SettingsManager.shared
print("Rakenduse versioon: \(settings.appVersion)")
// Delegate näide (lihtne)
protocol ButtonDelegate: AnyObject {
func buttonWasTapped(_ button: UIButton)
}
class MyButton: UIButton {
weak var delegate: ButtonDelegate? // Delegate omadus
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
delegate?.buttonWasTapped(self) // Kutsuge välja delegate meetod
}
}
class ViewController: UIViewController, ButtonDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
myButton.setTitle("Puuduta mind", for: .normal)
myButton.backgroundColor = .blue
myButton.delegate = self // Määra delegate
view.addSubview(myButton)
}
func buttonWasTapped(_ button: UIButton) {
print("Nupp vajutatud ViewControlleris")
}
}