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