Sobes.tech
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")
    }
}