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")
}
}