Mae'r Patrwm Decorator yn un o'r patrwmau dylunio mwyaf defnyddiol yn y byd datblygu meddalwedd. Mae'n caniatáu i ni ychwanegu swyddogaethau newydd i'r dosbarthiadau presennol heb newid eu cod. Yn yr erthygl hon, byddwn yn archwilio sut i weithredu'r Patrwm Decorator yn Ruby, gan ddefnyddio enghreifftiau cod a throsiadau clir.
Mae'r Patrwm Decorator yn caniatáu i ni ychwanegu nodweddion newydd i'r gwrthrychau heb newid y dosbarth sylfaenol. Mae'n gweithio trwy greu dosbarthiadau newydd sy'n "addasu" dosbarthiadau presennol. Mae hyn yn arbennig o ddefnyddiol pan fyddwn am ychwanegu nodweddion yn raddol, gan osgoi'r angen i greu dosbarthiadau newydd ar gyfer pob cyfuniad o nodweddion.
Yn Ruby, gallwn greu'r Patrwm Decorator trwy ddefnyddio dosbarthiadau a throsglwyddo'r gwrthrychau. Gadewch i ni edrych ar enghraifft syml i ddechrau.
Dyma enghraifft syml o'r Patrwm Decorator yn Ruby. Byddwn yn creu dosbarth sy'n cynrychioli coffi, ac yna byddwn yn defnyddio'r patrwm i ychwanegu nodweddion fel 'sugar' a 'milk'.
class Coffee
def cost
5
end
def description
"Coffi"
end
end
class MilkDecorator
def initialize(coffee)
@coffee = coffee
end
def cost
@coffee.cost + 1
end
def description
"#{@coffee.description} gyda llaeth"
end
end
class SugarDecorator
def initialize(coffee)
@coffee = coffee
end
def cost
@coffee.cost + 0.5
end
def description
"#{@coffee.description} gyda siwgr"
end
end
# Defnyddio'r dosbarth
coffee = Coffee.new
puts "#{coffee.description} - Cost: #{coffee.cost}£"
milk_coffee = MilkDecorator.new(coffee)
puts "#{milk_coffee.description} - Cost: #{milk_coffee.cost}£"
sugar_milk_coffee = SugarDecorator.new(milk_coffee)
puts "#{sugar_milk_coffee.description} - Cost: #{sugar_milk_coffee.cost}£"
Yn yr enghraifft hon, rydym wedi creu dosbarth 'Coffee' sy'n cynrychioli coffi sylfaenol. Yna, rydym wedi creu dwy dosbarth 'Decorator' - 'MilkDecorator' a 'SugarDecorator' - sy'n ychwanegu nodweddion i'r coffi. Mae'r dosbarth 'MilkDecorator' yn ychwanegu cost a disgrifiad ar gyfer llaeth, tra bod 'SugarDecorator' yn gwneud yr un peth ar gyfer siwgr.
Mae'r broses o ddefnyddio'r Patrwm Decorator yn Ruby yn syml. Dyma'r camau i'w dilyn:
Gadewch i ni edrych ar enghreifftiau ychwanegol i ddangos sut y gallwn ddefnyddio'r Patrwm Decorator mewn sefyllfaoedd mwy cymhleth.
Dyma enghraifft lle rydym yn defnyddio'r Patrwm Decorator i ychwanegu gwasanaethau i ddirprwywr:
class BaseService
def cost
100
end
def description
"Gwasanaeth sylfaenol"
end
end
class PremiumServiceDecorator
def initialize(service)
@service = service
end
def cost
@service.cost + 50
end
def description
"#{@service.description} gyda gwasanaeth premia"
end
end
class ExpressServiceDecorator
def initialize(service)
@service = service
end
def cost
@service.cost + 30
end
def description
"#{@service.description} gyda gwasanaeth mynydd"
end
end
# Defnyddio'r dosbarth
service = BaseService.new
puts "#{service.description} - Cost: #{service.cost}£"
premium_service = PremiumServiceDecorator.new(service)
puts "#{premium_service.description} - Cost: #{premium_service.cost}£"
express_service = ExpressServiceDecorator.new(service)
puts "#{express_service.description} - Cost: #{express_service.cost}£"
premium_express_service = ExpressServiceDecorator.new(premium_service)
puts "#{premium_express_service.description} - Cost: #{premium_express_service.cost}£"
Yn yr enghraifft hon, rydym wedi creu dosbarth 'BaseService' sy'n cynrychioli gwasanaeth sylfaenol. Yna, rydym wedi creu dwy dosbarth decorator - 'PremiumServiceDecorator' a 'ExpressServiceDecorator' - sy'n ychwanegu cost a disgrifiad ar gyfer gwasanaethau premia a mynydd.
Mae'r Patrwm Decorator yn ffordd effeithiol o ychwanegu nodweddion newydd i'r gwrthrychau heb newid y cod presennol. Mae'n cynnig hyblygrwydd a diogelwch wrth ddatblygu meddalwedd. Trwy ddefnyddio'r enghreifftiau a'r camau a drafodwyd yn yr erthygl hon, gallwch ddechrau defnyddio'r Patrwm Decorator yn eich prosiectau Ruby.
Gobeithio bod yr erthygl hon wedi bod o gymorth i chi ddeall y Patrwm Decorator a'i weithredu yn Ruby. Peidiwch ag oedi i archwilio mwy o enghreifftiau a chreu eich fersiwn eich hun o'r patrwm hwn!
© 2024 RailsInsights. All rights reserved.