Sobes.tech
Junior

Ի՞նչ նախագծման ձևանմուշներ եք ճանաչում:

sobes.tech AI

Պատասխան AI-ից

Ստեղծողներ:

  • Singleton: Համոզված է, որ կա միայն մեկ օրինակ դասից և տրամադրում է գլոբալ մուտք դեպի այն:
  • Factory Method: Դասավորում է օբյեկտի ստեղծման ինտերֆեյսը, բայց թույլ է տալիս ենթակլասներին որոշել, թե որ դասը պետք է ստեղծվի:
  • Abstract Factory: Տրամադրում է ինտերֆեյս կապված կամ կախված օբյեկտների ընտանիքների ստեղծման համար, առանց կոնկրետ դասերի սահմանման:
  • Builder: Բաժանում է բարդ օբյեկտի կառուցումը քայլերի, թույլ տալով ստեղծել տարբեր ներկայացումներ նույն կառուցման գործընթացով:
  • Prototype: Ստեղծում է օբյեկտներ՝ կրկնօրինակումով առկա օրինակին, փոխարենը կրկնօրինակում գործընթացը:

Կառուցվածքային:

  • Adapter: Փոխում է մեկ դասի ինտերֆեյսը մյուսին, որը սպասում են հաճախորդները: Позволяет работать классам с несовместимыми интерфейсами.
  • Bridge: Բաժանում է աբստրակցիան իր իրականացմանից, թույլ տալով նրանց փոփոխվել անկախ one from the other.
  • Composite: Կոմպոզիցիա է կառուցում օբյեկտներից՝ ծառային կառուցվածքներում՝ ներկայացնելու և ենթակառուցվածքների «մաս-մեկը»: Позволяет клиентам единообразно работать с отдельными объектами и композициями объектов.
  • Decorator: Դինամիկ կերպով ավելացնում է նոր պարտականություններ օբյեկտին՝ շրջապատելով այն հատուկ դեկորատոր օբյեկտով:
  • Facade: Տրամադրում է միացյալ ինտերֆեյս ենթաբազմության ինտերֆեյսների հավաքածուին: Դասավորում է բարձր մակարդակի ինտերֆեյս, որը պարզեցնում է ենթաբազմության օգտագործումը:
  • Flyweight: Օգտագործում է բաժանվող վիճակ՝ փոքր օբյեկտների միջև՝ նվազեցնելու հիշողության սպառումը և բարձրացնելու արտադրողականությունը:
  • Proxy: Տրամադրում է փոխարինող օբյեկտ՝ կառավարելով մուտքը սկզբնական օբյեկտին:

Պատասխանատու:

  • Chain of Responsibility: Հաղորդում է հարցումը պատասխանատու օղակով: Յուրաքանչյուր պատասխանատու որոշում է՝ արդյոք պետք է մշակել հարցումը կամ փոխանցել հաջորդին:
  • Command: Ինքագրում է հարցումը որպես օբյեկտ՝ թույլ տալով տարբեր հաճախորդների համար հարցումներ պարամետրավորել, հերթականացնել կամ գրանցել:
  • Interpreter: Դասավորում է լեզվի գրամատիկական ներկայացումը և ներառում է ինտերպրետատոր՝ հարցումները մեկնաբանելու համար:
  • Iterator: Տրամադրում է միջոց՝ անցնելու բոլոր տարրերին՝ առանց բացահայտելու ներքին ներկայացումը:
  • Mediator: Դասավորում է օբյեկտներ՝ կառավարելու փոխազդեցությունը մյուս օբյեկտների միջև:
  • Memento: Տրամադրում է հնարավորություն պահպանելու և վերականգնելու օբյեկտի ներքին վիճակը՝ խախտելով ինկապսուլյացիան:
  • Observer: Դասավորում է «մեկից շատ» կախվածություն՝ երբ օբյեկտի վիճակը փոխվում է, բոլոր կախված օբյեկտները տեղեկացվում և ինքնաբերաբար թարմացվում են:
  • State: Позволяет объекту изменять свое поведение в зависимости от своего внутреннего состояния:
  • Strategy: Դասավորում է ալգորիթմների ընտանիք, ինքագրում է յուրաքանչյուրին և դարձնում փոխարինելի: Ընտրում է ալգորիթմը ժամանակի ընթացքում:
  • Template Method: Դասավորում է ալգորիթմի շրջանակը՝ հետաձգելով որոշ քայլեր ենթակլասների համար:
  • Visitor: Ներկայացնում է գործողությունը, որը պետք է կատարվի օբյեկտների կառուցվածքի տարրերի վրա:

Նաև հաճախ հանդիպում է iOS մշակման մեջ՝

  • Model-View-Controller (MVC): Կառուցվածքային դիզայնի օրինակ, բաժանում է հավելվածը երեք կապված բաղադրիչների՝ Մոդել, Ներկայացում և Կառավարիչ:
  • Delegate: Позволяет одному объекту действовать от имени другого:
  • Observer (NotificationCenter): Հաղորդակցման համակարգ, որը թույլ է տալիս օբյեկտներին ստանալ հաղորդագրություններ առանց ուղիղ կապի:
  • Target-Action: Մեխանիզմ՝ հաղորդագրությունների ուղարկում կառավարման տարրերից՝ օրինակ, կոճակներից՝ նպատակային օբյեկտին:
  • Coordinator: Դասավորում է նավիգացիայի հոսքերը՝ բաժանելով նավիգացիայի լոգիկան վերահսկողներից:
  • Dependency Injection: Դիզայնի օրինակ, երբ օբյեկտի կախվածությունները ներմուծվում են դուրսից՝ փոխարենը ստեղծելու իրենց:
// Օրինակ Singleton
class SettingsManager {
    static let shared = SettingsManager() // Միայն մեկ օրինակ

    private init() {
        // Պատկանելի ինիցիալիզացիա՝ խուսափելու արտաքին ստեղծումից
    }

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

// Օգտագործում
let settings = SettingsManager.shared
print("Հավելվածի տարբերակ: \(settings.appVersion)")
// Օրինակ Delegate (պարզ)
protocol ButtonDelegate: AnyObject {
    func buttonWasTapped(_ button: UIButton)
}

class MyButton: UIButton {
    weak var delegate: ButtonDelegate? // Delegate հատկություն

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

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

    func buttonWasTapped(_ button: UIButton) {
        print("Բտկը սեղմվեց ViewController-ում")
    }
}