Junior
Бо кадом намунаҳои тарҳрезӣ шинос ҳастед?
sobes.tech AI
Ҷавоб аз AI
Ман бо шаблонизми тарҳрезии гуногун дар Go шинос ҳастам. Баъзеи маъмултаринҳояшон:
Шаблони эҷодӣ:
- Singleton: Мӯътадил месозад, ки танҳо як нусхаи синф вуҷуд дорад ва ба он дастрасии глобалӣ медиҳад. Дар Go, он одатан бо ёрии
sync.Onceамалӣ мешавад.package main import ( "sync" ) type singleton struct{} var instance *singleton var once sync.Once func GetInstance() *singleton { once.Do(func() { instance = &singleton{} }) return instance } - Методи фабрика: Интерфейси барои эҷоди объект муайян мекунад, аммо синфҳои зерини он қарор медиҳанд, ки кадом синфро инстанс кунанд. Дар Go, он одатан бо функсияҳое, ки интерфейсро баргардонанд, амалӣ мешавад.
package main type Product interface { Operate() } type ConcreteProductA struct{} func (p *ConcreteProductA) Operate() { // Иҷрои амалиёт } type ConcreteProductB struct{} func (p *ConcreteProductB) Operate() { // Иҷрои амалиёт } func NewProduct(productType string) Product { switch productType { case "A": return &ConcreteProductA{} case "B": return &ConcreteProductB{} default: return nil // ё хато } } - Фабрикаи абстрактӣ: Интерфейси барои эҷоди оилаҳои объектҳои вобаста ё пайвандӣ медиҳад, бе муайян кардани синфҳои мушаххас.
- Builder: Ҳар як раванди сохтани объектҳои мураккабро аз намоиши он ҷудо мекунад.
Шаблони сохторӣ:
- Adapter: Интерфейси як синфро ба дигаре табдил медиҳад, ки мизоҷон талаб мекунанд. Имкон медиҳад, ки синфҳо дар якҷоягӣ кор кунанд, ки дар акси ҳол мувофиқ набуданд.
- Decorator: Меъёри навро ба объект илова мекунад. Декораторҳо алтернативаи чандир барои меросгирӣ барои васеъ кардани функсионалият медиҳанд.
- Facade: Интерфейси ягона барои маҷмӯи интерфейсҳо дар зерсистемаро таъмин мекунад. Интерфейси сатҳи баландро муайян мекунад, ки истифодаи зерсистемаҳоро осон мекунад.
- Proxy: Маҳдуд ё ивазкунандаи объект барои идора кардани дастрасӣ ба он.
Шаблони рафторӣ:
- Observer: Муайян мекунад, ки байни объектҳо чӣ гуна вобастагӣ "як ба бисёре" вуҷуд дорад. Вақте ки ҳолати як объект тағйир меёбад, ҳамаи объектҳои вобаста огоҳ карда мешаванд ва автоматӣ нав карда мешаванд.
- Strategy: Оид ба оилаҳои алгоритмҳо, онҳоро капсула мекунад ва онҳоро ивазшаванда мекунад. Имкон медиҳад, ки алгоритмҳо мустақилона тағйир ёбанд, аз мизоҷоне, ки онҳоро истифода мебаранд.
package main type Strategy interface { Execute(data string) } type ConcreteStrategyA struct{} func (s *ConcreteStrategyA) Execute(data string) { // Иҷрои стратегия A } type ConcreteStrategyB struct{} func (s *ConcreteStrategyB) Execute(data string) { // Иҷрои стратегия B } type Context struct { strategy Strategy } func (c *Context) SetStrategy(strategy Strategy) { c.strategy = strategy } func (c *Context) ExecuteStrategy(data string) { c.strategy.Execute(data) } - Шаблони намуна: Муайян мекунад рамзҳои алгоритм дар як амалиёт, бо гузоштани баъзе қадамҳо ба зерсинфҳо. Имкон медиҳад, ки зерсинфҳо баъзе қадамҳоро такрор таъриф кунанд, бе тағир додани сохтори он.
Илова бар ин, ман бо шаблонҳое мисли Command, Chain of Responsibility, Iterator, Mediator, Memento, State, Visitor шинос ҳастам. Дар Go, инчунин, идиомҳои забон, мисли истифодаи интерфейсҳо барои абстраксия, горутинҳо ва каналҳо барои параллелизм, маъмуланд.