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.