Junior
Kokius projektavimo modelius žinote?
sobes.tech AI
Atsakymas iš AI
Kūrėjai:
- Singleton: Užtikrina, kad egzistuoja tik vienas klasės egzempliorius ir suteikia globalią prieigą prie jo.
- Factory Method: Apibrėžia sąsają objektui kurti, bet leidžia pogrupių klasėms nuspręsti, kurią klasę instancijuoti.
- Abstract Factory: Suteikia sąsają kurti susijusių arba priklausomų objektų šeimas, nenurodant jų konkrečių klasių.
- Builder: Suskaido sudėtingo objekto konstravimą į žingsnius, leidžiant kurti įvairias objekto reprezentacijas naudojant tą patį konstravimo procesą.
- Prototype: Kuria objektus dubliuodama esamą egzempliorių, o ne kartodama konstravimo procesą.
Struktūriniai:
- Adapter: Paverčia vieno klases sąsają į kitą, kurios tikisi klientai. Leidžia dirbti nesuderinamiems sąsajų klasėms.
- Bridge: Atskiria abstrakciją nuo jos įgyvendinimo, leidžiant jiems keistis nepriklausomai.
- Composite: Sudeda objektus į medžio struktūras, kad atstovautų "dalis-visas" hierarchijas. Leidžia klientams vienodai dirbti su atskirais objektais ir jų kompozicijomis.
- Decorator: Dinamiškai prideda naujų atsakomybių objektui, apvyniojant jį specialiu dekoratoriaus objektu.
- Facade: Suteikia vieningą sąsają po-subsystemo sąsajų rinkiniui. Apibrėžia aukštesnio lygio sąsają, kuri supaprastina subsystemo naudojimą.
- Flyweight: Naudoja pasidalintą būseną tarp daugelio smulkių objektų, siekiant sumažinti atminties naudojimą ir padidinti našumą.
- Proxy: Suteikia objekto pakaitalą, kuris valdo prieigą prie originalaus objekto.
Elgseniniai:
- Chain of Responsibility: Perduoda užklausą per atsakomybės grandinę. Kiekvienas grandinės narys nusprendžia, ar apdoroti užklausą, ar perduoti kitam.
- Command: Inkapusliuoja užklausą kaip objektą, leidžiantį parametrizuoti klientus su skirtingomis užklausomis, juos eilėje arba žurnale.
- Interpreter: Apibrėžia gramatinį kalbos vaizdą ir įtraukia interpretatorių užklausų interpretacijai.
- Iterator: Suteikia būdą nuosekliai prieiti prie visų sudėtinio objekto elementų, neatskleidžiant jo vidinio vaizdavimo.
- Mediator: Apibrėžia objektus, kurie valdo kitų objektų sąveiką. Skatina silpną susiejimą, leidžiant objektams sąveikauti be tiesioginio kreipimosi vienas į kitą.
- Memento: Suteikia galimybę išsaugoti ir atkurti objekto vidinę būseną be pažeidžiant inkapsuliaciją.
- Observer: Apibrėžia "vienas su daug" priklausomybę tarp objektų, kad kai vieno objekto būsena keičiasi, visi priklausomi objektai būtų informuoti ir automatiškai atnaujinami.
- State: Leidžia objektui keisti savo elgesį priklausomai nuo jo vidinės būsenos. Kiekviena būsena įkapsuliuota atskirame klasėje.
- Strategy: Apibrėžia algoritmų šeimą, juos įkapsuliuoja ir daro keičiamus. Leidžia pasirinkti algoritmą vykdymo metu.
- Template Method: Apibrėžia algoritmo karkasą operacijoje, atidėdamas tam tikrus žingsnius pogrupiams. Leidžia pogrupiams apibrėžti žingsnius be algoritmo struktūros keitimo.
- Visitor: Atstovauja operaciją, kuri turi būti vykdoma objektų struktūros elementuose. Leidžia apibrėžti naują operaciją, nekeičiant elementų klasių, kuriomis ji veikia.
Taip pat dažnai naudojama iOS kūrime:
- Model-View-Controller (MVC): Architektūros modelis, kuris skiria programą į tris susijusius komponentus: Modelį (duomenys ir verslo logika), Vaizdą (vartotojo sąsaja) ir Valdiklį (ryšys tarp Modelio ir Vaizdo).
- Delegate: Leidžia vienam objektui veikti kito vardu arba koordinuoti kitų objektų veiksmus.
- Observer (NotificationCenter): Pranešimų siuntimo sistema, leidžianti objektams gauti pranešimus be tiesioginio ryšio.
- Target-Action: Mechanizmas, naudojamas pranešimų siuntimui iš valdymo elementų (pvz., mygtukų) į tikslinį objektą.
- Coordinator: Navigacijos srautų valdymo modelis, atskiriantis navigacijos logiką nuo valdiklių.
- Dependency Injection: Modelis, kai objekto priklausomybės įvedamos iš išorės, o ne kuriamos pačios.
// Singleton pavyzdys
class SettingsManager {
static let shared = SettingsManager() // Vienas egzempliorius
private init() {
// Privatus inicializatorius, kad būtų išvengta išorinio kūrimo
}
var appVersion: String {
return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Nežinoma"
}
}
// Naudojimas
let settings = SettingsManager.shared
print("Programos versija: \(settings.appVersion)")
// Delegate pavyzdys (paprastas)
protocol ButtonDelegate: AnyObject {
func buttonWasTapped(_ button: UIButton)
}
class MyButton: UIButton {
weak var delegate: ButtonDelegate? // Delegate savybė
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
delegate?.buttonWasTapped(self) // Iškviečia delegate metodą
}
}
class ViewController: UIViewController, ButtonDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
myButton.setTitle("Paliesk mane", for: .normal)
myButton.backgroundColor = .blue
myButton.delegate = self // Nustato delegate
view.addSubview(myButton)
}
func buttonWasTapped(_ button: UIButton) {
print("Mygtukas paspaustas ViewController")
}
}