婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Ruby使用設計模式中的代理模式與裝飾模式的代碼實例

Ruby使用設計模式中的代理模式與裝飾模式的代碼實例

熱門標簽:電銷機器人廠商代理 湖州u友防封電銷卡 白銀外呼paas系統(tǒng) 常德電銷平臺外呼系統(tǒng)軟件價格 百度地圖標注自定義圖片 地圖標注賺錢項目注冊 高德地圖標注客服 徐州網絡外呼系統(tǒng)哪個好 滴滴外呼系統(tǒng)

代理模式

需求:

小明讓小李替他追小麗(送洋娃娃,送花,送巧克力)

沒有代理的代碼:

# -*- encoding: utf-8 -*-

#追求者類
class Pursuit
 attr_accessor :mm
 
 def initialize(mm)
  @mm = mm
 end
 
 def give_dolls
  puts "#{mm.name} 送你洋娃娃"
 end
 
 def give_flowers
  puts "#{mm.name} 送你鮮花"
 end
 
 def give_chocolate
  puts "#{mm.name} 送你巧克力"
 end

end

#被追求者類
class Girl
 attr_accessor :name
 
 def initialize(name)
  @name = name
 end
end

xiao_hong = Girl.new('小紅')

xiao_ming = Pursuit.new(xiao_hong)
xiao_ming.give_dolls
xiao_ming.give_flowers
xiao_ming.give_chocolate

只有代理的代碼:

# -*- encoding: utf-8 -*-

#代理類
class Proxy
 attr_accessor :mm
 
 def initialize(mm)
  @mm = mm
 end
 
 def give_dolls
  puts "#{mm.name} 送你洋娃娃"
 end
 
 def give_flowers
  puts "#{mm.name} 送你鮮花"
 end
 
 def give_chocolate
  puts "#{mm.name} 送你巧克力"
 end

end

#被追求者類
class Girl
 attr_accessor :name
 
 def initialize(name)
  @name = name
 end
end

xiao_hong = Girl.new('小紅')

xiao_ming = Proxy.new(xiao_hong)
xiao_ming.give_dolls
xiao_ming.give_flowers
xiao_ming.give_chocolate

只是把追求者類換成了代理類。

實際的代理模式代碼:

# -*- encoding: utf-8 -*-

#公共接口module
module GiveGift
 def give_dolls
 end
 
 def give_flowers
 end
 
 def give_chocolate
 end
end

#追求者類
class Pursuit
 include GiveGift
 attr_accessor :mm, :name
 
 def initialize(mm)
  @mm = mm
 end
 
 def give_dolls
  puts "#{mm.name} 替#{name}送你洋娃娃"
 end
 
 def give_flowers
  puts "#{mm.name} 替#{name}送你鮮花"
 end
 
 def give_chocolate
  puts "#{mm.name} 替#{name}送你巧克力"
 end

end

#代理類
class Proxy
 include GiveGift
 attr_accessor :gg
 
 def initialize(mm)
  @gg = Pursuit.new(mm)
 end
 
 def give_dolls
  gg.give_dolls
 end
 
 def give_flowers
  gg.give_flowers
 end
 
 def give_chocolate
  gg.give_chocolate
 end

end

#被追求者類
class Girl
 attr_accessor :name
 
 def initialize(name)
  @name = name
 end
end

xiao_hong = Girl.new('小紅')

xiao_ming = Proxy.new(xiao_hong)
xiao_ming.gg.name = '小明'
xiao_ming.give_dolls
xiao_ming.give_flowers
xiao_ming.give_chocolate


裝飾模式
 
需求:

給人搭配不同的服飾

代碼版本一

# -*- encoding: utf-8 -*-

class Person
 attr_accessor :name
 
 def initialize(name)
  @name = name
 end
 
 def wear_t_shirts
  puts '大T恤'
 end
 
 def wear_big_trouser
  puts '垮褲'
 end
 
 def wear_sneakers
  puts '破球鞋'
 end
 
 def wear_suit
  puts '西裝'
 end
 
 def wear_tie
  puts '領帶'
 end
 
 def wear_leather_shoes
  puts '皮鞋'
 end
 
 def show
  puts "*****裝扮的#{name}\n\n"
 end

end


xc=Person.new('小菜')
puts "******第一種裝扮"
xc.wear_t_shirts
xc.wear_big_trouser
xc.wear_sneakers
xc.show

puts "******第二種裝扮"
xc.wear_suit
xc.wear_tie
xc.wear_leather_shoes
xc.show

這樣寫的話,功能是實現(xiàn)了,問題是如果增加“超人”的裝扮,就要修改Person類,違反了開放-封閉原則。

 

代碼版本二

# -*- encoding: utf-8 -*-

class Person
 attr_accessor :name
 
 def initialize(name)
  @name = name
 enddef show
  puts "*****裝扮的#{name}\n\n"
 end

end


class Finery
 def show
 end
end

class TShirts  Finery
 def show
  puts '大T恤'
 end
end

class BigTrouser  Finery
 def show
  puts '垮褲'
 end
end

class Sneakers  Finery
 def show
  puts '破球鞋'
 end
end

class Suit  Finery
 def show
  puts '西裝'
 end
end

class Tie  Finery
 def show
  puts '領帶'
 end
end


class LeatherShoes  Finery
 def show
  puts '皮鞋'
 end
end


xc=Person.new('小菜')
ts = TShirts.new
bt = BigTrouser.new
sk = Sneakers.new
puts "******第一種裝扮"
ts.show
bt.show
sk.show
xc.show


suit = Suit.new
tie = Tie.new
ls = LeatherShoes.new
puts "******第二種裝扮"
suit.show
tie.show
ls.show
xc.show

這樣改了之后,如果增加超人裝扮,確實不需要去修改Person類。存在的問題是,各種衣服是獨立的,并且暴露在外邊的,就是一件一件穿的,沒有順序,沒有控制。

代碼版本三

# -*- encoding: utf-8 -*-

class Person
 attr_accessor :name
 
 def initialize(name=nil)
  @name = name
 end
 
 def show
  puts "*****裝扮的#{name}\n\n"
 end

end


class Finery  Person
 attr_accessor :componet

 def decorate(componet)
  @componet = componet
 end

 def show
  componet.show if componet
 end
end

class TShirts  Finery
 def show
  super
  puts '大T恤'
 end
end

class BigTrouser  Finery
 def show
  super
  puts '垮褲'
 end
end

class Sneakers  Finery
 def show
  super
  puts '破球鞋'
 end
end

class Suit  Finery
 def show
  super
  puts '西裝'
 end
end

class Tie  Finery
 def show
  super
  puts '領帶'
 end
end


class LeatherShoes  Finery
 def show
  super
  puts '皮鞋'
 end
end


xc=Person.new('小菜')
ts = TShirts.new
bt = BigTrouser.new
sk = Sneakers.new
puts "******第一種裝扮"
ts.decorate xc
bt.decorate ts
sk.decorate bt
sk.show


suit = Suit.new
tie = Tie.new
ls = LeatherShoes.new
puts "******第二種裝扮"
suit.decorate xc
tie.decorate suit
ls.decorate bt
ls.show

您可能感興趣的文章:
  • java 裝飾模式(Decorator Pattern)詳解及實例代碼
  • java 裝飾模式(Decorator Pattern)詳解
  • C# 設計模式系列教程-裝飾模式
  • 詳解java裝飾模式(Decorator Pattern)
  • Java設計模式之裝飾模式(Decorator模式)介紹
  • C++設計模式之裝飾模式
  • java設計模式之裝飾模式詳細介紹
  • php設計模式 Decorator(裝飾模式)
  • .NET簡單工廠模式講解
  • .NET裝飾模式講解

標簽:荊門 梧州 永州 張家界 遼寧 三沙 普洱 公主嶺

巨人網絡通訊聲明:本文標題《Ruby使用設計模式中的代理模式與裝飾模式的代碼實例》,本文關鍵詞  Ruby,使用,設計模式,中的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby使用設計模式中的代理模式與裝飾模式的代碼實例》相關的同類信息!
  • 本頁收集關于Ruby使用設計模式中的代理模式與裝飾模式的代碼實例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 涞源县| 迁西县| 肇东市| 宁阳县| 福清市| 运城市| 渭南市| 龙南县| 贺兰县| 前郭尔| 陵川县| 元谋县| 开江县| 株洲市| 清流县| 定南县| 博兴县| 磴口县| 拉萨市| 新巴尔虎右旗| 区。| 金坛市| 定兴县| 灌阳县| 铜山县| 长沙市| 嵊泗县| 响水县| 金溪县| 吉木萨尔县| 达尔| 博乐市| 石屏县| 福州市| 新源县| 永康市| 邵武市| 城步| 阜新市| 安溪县| 福海县|