Sobes.tech
Junior

Kādus dizaina modeļus jūs zināt?

sobes.tech AI

Atbilde no AI

Radītāji:

  • Singleton: Nodrošina, ka ir tikai viens klases instances un nodrošina globālu piekļuvi tai.
  • Factory Method: Definē saskarni objekta izveidei, bet ļauj apakšklasēm izlemt, kuru klasi instancēt.
  • Abstract Factory: Nodrošina saskarni saistītu vai atkarīgu objektu ģimeņu izveidei, nenorādot konkrētas klases.
  • Builder: Sadala sarežģīta objekta būvniecību pa soļiem, ļaujot izveidot dažādas objekta pārstāvniecības, izmantojot vienu būvniecības procesu.
  • Prototype: Izveido objektus, dubultojot esošo eksemplāru, nevis atkārtoti veicot būvniecības procesu.

Strukturālie:

  • Adapter: Pārvērš viena klases saskarni citā, ko sagaida klienti. Atļauj strādāt ar nesaderīgām saskarnēm.
  • Bridge: Atdala abstrakciju no tās īstenošanas, ļaujot tām mainīties neatkarīgi.
  • Composite: Apvieno objektus koka struktūrās, lai attēlotu "daļa-visas" hierarhijas. Atļauj klientiem vienlīdzīgi strādāt ar atsevišķiem objektiem un to kopumiem.
  • Decorator: Dinamiski pievieno jaunas atbildības objektam, ietverot to īpašā dekoratora objektā.
  • Facade: Nodrošina vienotu saskarni apakšsistēmas saskarnēm. Definē augstākā līmeņa saskarni, kas vienkāršo apakšsistēmas izmantošanu.
  • Flyweight: Izmanto koplietotu stāvokli starp daudziem maziem objektiem, lai samazinātu atmiņas patēriņu un palielinātu veiktspēju.
  • Proxy: Nodrošina objekta aizstājēju, kas pārvalda piekļuvi oriģinālajam objektam.

Uzvedības:

  • Chain of Responsibility: Pārsūta pieprasījumu pa atbildības ķēdi. Katrs ķēdes elements lemj, vai apstrādāt pieprasījumu vai pārsūtīt to nākamajam.
  • Command: Iekapsulē pieprasījumu kā objektu, ļaujot dažādiem klientiem parametrizēt, rindot vai reģistrēt pieprasījumus.
  • Interpreter: Definē valodas gramatisko pārstāvību un iekļauj interpretatoru pieprasījumu interpretācijai.
  • Iterator: Nodrošina veidu, kā secīgi piekļūt visiem sastāvdaļa objekta elementiem, neizpaužot tā iekšējo pārstāvību.
  • Mediator: Definē objektus, kas pārvalda citu objektu mijiedarbību. Veicina vājas saistības, ļaujot objektiem mijiedarboties bez tiešas saziņas.
  • Memento: Nodrošina iespēju saglabāt un atjaunot objekta iekšējo stāvokli, neapdraudot inkapsulāciju.
  • Observer: Definē "viens pret daudz" atkarību starp objektiem, tādējādi, mainoties viena objekta stāvoklim, visi atkarīgie objekti tiek informēti un automātiski atjaunināti.
  • State: Ļauj objektam mainīt savu uzvedību atkarībā no iekšējā stāvokļa. Katrs stāvoklis ir inkapsulēts atsevišķā klasē.
  • Strategy: Definē algoritmu ģimeni, to inkapsulē un padara maināmu. Ļauj izvēlēties algoritmu izpildes laikā.
  • Template Method: Definē algoritma karkasu operācijā, atlikdams dažus soļus uz apakšklasēm. Ļauj apakšklasēm definēt algoritma soļus bez paša algoritma struktūras maiņas.
  • Visitor: Attēlo operāciju, kas jāveic objekta struktūras elementiem. Ļauj definēt jaunas operācijas, nemainot elementu klases, uz kuriem tā darbojas.

Arī bieži sastopams iOS izstrādē:

  • Model-View-Controller (MVC): Arhitektūras modelis, kas sadala lietotni trīs saistītos komponentos: Modeli (dati un biznesa loģika), Skatu (lietotāja interfeiss) un Kontrolieri (saikne starp modeli un skatu).
  • Delegate: Atļauj vienam objektam rīkoties no cita vārda vai koordinēt citu objektu darbības.
  • Observer (NotificationCenter): Paziņojumu sūtīšanas sistēma, kas ļauj objektiem saņemt ziņojumus bez tiešas saites.
  • Target-Action: Mehānisms, kas tiek izmantots ziņojumu sūtīšanai no vadības elementiem (piemēram, pogām) uz mērķa objektu.
  • Coordinator: Navigācijas plūsmu pārvaldības modelis, kas atdala navigācijas loģiku no kontrolieriem.
  • Dependency Injection: Modelis, kurā objekta atkarības tiek injicētas no ārpuses, nevis tās pašas tiek radītas.
// Singleton piemērs
class SettingsManager {
    static let shared = SettingsManager() // Viena instance

    private init() {
        // Privāts inicializators, lai novērstu ārēju radīšanu
    }

    var appVersion: String {
        return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Nezināma"
    }
}

// Izmantošana
let settings = SettingsManager.shared
print("Lietojumprogrammas versija: \(settings.appVersion)")
// Delegate piemērs (vienkāršs)
protocol ButtonDelegate: AnyObject {
    func buttonWasTapped(_ button: UIButton)
}

class MyButton: UIButton {
    weak var delegate: ButtonDelegate? // Delegate īpašība

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        delegate?.buttonWasTapped(self) // Izsauc delegate metodi
    }
}

class ViewController: UIViewController, ButtonDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
        myButton.setTitle("Piespiediet mani", for: .normal)
        myButton.backgroundColor = .blue
        myButton.delegate = self // Iestata delegate
        view.addSubview(myButton)
    }

    func buttonWasTapped(_ button: UIButton) {
        print("Poga nospiesta ViewController")
    }
}