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-ում")
}
}