Junior
Qaysi dizayn shablonlari bilan tanishsiz?
sobes.tech AI
AIdan javob
Go'da ishlatiladigan turli dizayn shablonlari bilan tanishman. Eng keng tarqalganlardan ba'zilari:
Yaratish shablonlari:
- Singleton: Bir sinfning faqat bitta nusxasi mavjud bo'lishini ta'minlaydi va unga global kirish nuqtasini taqdim etadi. Go'da ko'pincha
sync.Onceyordamida amalga oshiriladi.package main import ( "sync" ) type singleton struct{} var instance *singleton var once sync.Once func GetInstance() *singleton { once.Do(func() { instance = &singleton{} }) return instance } - Factory Method: Ob'ekt yaratish uchun interfeysni belgilaydi, ammo subklasslarga qaysi sinfni instansiya qilishni hal qilish imkonini beradi. Go'da ko'pincha funksiyalar yordamida amalga oshiriladi va interfeysni qaytaradi.
package main type Product interface { Operate() } type ConcreteProductA struct{} func (p *ConcreteProductA) Operate() { // Operatsiya amalga oshirilishi } type ConcreteProductB struct{} func (p *ConcreteProductB) Operate() { // Operatsiya amalga oshirilishi } func NewProduct(productType string) Product { switch productType { case "A": return &ConcreteProductA{} case "B": return &ConcreteProductB{} default: return nil // yoki xato } } - Abstract Factory: Oila yoki bog'liq ob'ektlar to'plamini yaratish uchun interfeys taqdim etadi, ammo ularning konkret sinflarini belgilamaydi.
- Builder: Murakkab ob'ektni qurish jarayonini uning taqdimotidan ajratadi.
Struktural shablonlar:
- Adapter: Bir sinfning interfeysini mijozlar kutayotgan boshqa interfeysga aylantiradi. Mos kelmaydigan sinflar birga ishlash imkonini beradi.
- Decorator: Ob'ektga dinamik ravishda yangi vazifalar qo'shadi. Dekoratorlar funksionallikni kengaytirish uchun merosga mos keladigan moslashuvchan alternativalarni taqdim etadi.
- Facade: Subsystemdagi bir qator interfeyslar uchun yagona interfeys taqdim etadi. Subsystemdan foydalanishni osonlashtiradigan yuqori darajadagi interfeysni belgilaydi.
- Proxy: Boshqa ob'ekt uchun o'rinbosar yoki vakil taqdim etadi, unga kirishni boshqaradi.
Xulq-atvor shablonlari:
- Observer: Ob'ektlar o'rtasida "birga ko'p" bog'liqlikni belgilaydi. Bir ob'ekt holati o'zgarganda, uning barcha bog'liq ob'ektlari xabardor qilinadi va avtomatik ravishda yangilanadi.
- Strategy: Algoritmlar oilasini belgilaydi, har birini kapsüllaydi va ularni almashtirishga imkon beradi. Algoritmlarni mustaqil ravishda o'zgartirish imkonini beradi.
package main type Strategy interface { Execute(data string) } type ConcreteStrategyA struct{} func (s *ConcreteStrategyA) Execute(data string) { // Strategiya A amalga oshirilishi } type ConcreteStrategyB struct{} func (s *ConcreteStrategyB) Execute(data string) { // Strategiya B amalga oshirilishi } type Context struct { strategy Strategy } func (c *Context) SetStrategy(strategy Strategy) { c.strategy = strategy } func (c *Context) ExecuteStrategy(data string) { c.strategy.Execute(data) } - Template Method: Algoritmning skeletini belgilaydi, ba'zi bosqichlarni subklasslarga qoldiradi. Subklasslarga algoritmning ba'zi bosqichlarini qayta belgilash imkonini beradi, uning tuzilmasini o'zgartirmasdan.
Yuqoridagi shablonlardan tashqari, Command, Chain of Responsibility, Iterator, Mediator, Memento, State, Visitor kabi shablonlar bilan ham tanishman. Go'da shuningdek, tilga xos dizayn idiomlari, masalan, interfeyslar yordamida abstraktsiya qilish, gorutinlar va kanallar yordamida parallelizmni qo'llash keng tarqalgan.