Rails Insights

Gweithredu'r Patrwm Decorator yn Ruby

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.

Beth yw'r Patrwm Decorator?

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.

Prif Fanteision y Patrwm Decorator

  • Hyblygrwydd: Gallwn ychwanegu nodweddion yn hawdd heb newid y cod presennol.
  • Diogelwch: Mae'n lleihau'r risg o dorri'r cod presennol wrth ychwanegu nodweddion newydd.
  • Adweithedd: Mae'n caniatáu i ni greu cyfuniadau o nodweddion yn hawdd.

Gosod y Patrwm Decorator yn Ruby

Yn Ruby, gallwn greu'r Patrwm Decorator trwy ddefnyddio dosbarthiadau a throsglwyddo'r gwrthrychau. Gadewch i ni edrych ar enghraifft syml i ddechrau.

Enghraifft Sylfaenol

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.

Y Broses o Ddefnyddio'r Patrwm Decorator

Mae'r broses o ddefnyddio'r Patrwm Decorator yn Ruby yn syml. Dyma'r camau i'w dilyn:

  1. Creu Dosbarth Sylfaenol: Creu dosbarth sy'n cynrychioli'r gwrthrych sylfaenol.
  2. Creu Dosbarth Decorator: Creu dosbarth sy'n derbyn gwrthrych o'r dosbarth sylfaenol fel paramedr.
  3. Ychwanegu Nodweddion: Ychwanegu nodweddion newydd i'r dosbarth decorator.
  4. Defnyddio'r Decorators: Creu gwrthrychau o'r dosbarth sylfaenol a'r decorators i greu cyfuniadau.

Enghreifftiau Ychwanegol

Gadewch i ni edrych ar enghreifftiau ychwanegol i ddangos sut y gallwn ddefnyddio'r Patrwm Decorator mewn sefyllfaoedd mwy cymhleth.

Enghraifft gyda Gwasanaethau

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.

Casgliad

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!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.