校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

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

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

代理模式

需求:

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

沒有代理的代碼:

# -*- 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

這樣寫的話,功能是實現了,問題是如果增加“超人”的裝扮,就要修改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,使用,設計模式,中的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby使用設計模式中的代理模式與裝飾模式的代碼實例》相關的同類信息!
  • 本頁收集關于Ruby使用設計模式中的代理模式與裝飾模式的代碼實例的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲精品免费视频| 在线播放一区二区三区| 欧美激情在线看| jizz一区二区| 亚洲视频中文字幕| 欧美日韩在线播放一区| 午夜电影一区二区三区| 欧美一二三在线| 国产一区二区导航在线播放| 欧美激情综合五月色丁香小说| 久草精品在线观看| 中文字幕av不卡| 色屁屁一区二区| 日韩精品五月天| 久久香蕉国产线看观看99| 国产馆精品极品| 亚洲人成网站精品片在线观看| 欧美日韩在线播放| 久久电影网站中文字幕| 国产亚洲女人久久久久毛片| 91麻豆高清视频| 三级在线观看一区二区| 久久久五月婷婷| 色吧成人激情小说| 美女一区二区在线观看| 欧美国产精品久久| 欧美人狂配大交3d怪物一区| 久久电影国产免费久久电影| 最新国产成人在线观看| 欧美一区二区成人| 国产99一区视频免费| 一区二区三区在线视频免费观看| 日韩亚洲欧美中文三级| 99久久久久免费精品国产| 午夜精品久久久久久久99水蜜桃| 亚洲精品一区在线观看| 99久久精品国产观看| 日韩高清不卡一区二区三区| 国产精品亲子伦对白| 91精品国产一区二区| 国产成都精品91一区二区三 | 26uuu精品一区二区| 99精品欧美一区二区三区小说| 奇米777欧美一区二区| 中文字幕日韩精品一区| 日韩欧美久久久| 欧美视频一区在线| 成人网在线播放| 久久精品国产亚洲高清剧情介绍| 亚洲激情综合网| 欧美国产日韩精品免费观看| 在线播放欧美女士性生活| 91在线丨porny丨国产| 久草中文综合在线| 亚洲成人精品影院| 亚洲少妇中出一区| 国产丝袜欧美中文另类| 欧美mv和日韩mv的网站| 欧美另类高清zo欧美| 99国产精品久久久久| 欧美电影免费观看完整版| 美国欧美日韩国产在线播放 | 亚洲欧美偷拍三级| 久久久精品2019中文字幕之3| 欧美一区二区女人| 欧美四级电影网| 欧美综合亚洲图片综合区| 99精品视频一区二区三区| 盗摄精品av一区二区三区| 韩国v欧美v日本v亚洲v| 偷拍亚洲欧洲综合| 亚洲图片有声小说| 一区二区三区四区在线| 亚洲欧洲一区二区在线播放| 国产目拍亚洲精品99久久精品| 亚洲精品一区二区三区99| 日韩精品最新网址| 日韩欧美www| 精品久久久久一区二区国产| 欧美成人r级一区二区三区| 91麻豆精品国产91久久久资源速度| 色婷婷激情久久| 欧美在线观看一区| 欧美三级电影网| 欧美日韩激情一区二区| 欧美一区二区三区免费视频| 欧美成人在线直播| 国产日韩精品一区二区浪潮av| 国产日产欧美一区| 国产精品三级久久久久三级| 中文字幕一区二区视频| 亚洲激情在线激情| 亚洲电影视频在线| 久久精品二区亚洲w码| 国产成人日日夜夜| 色先锋久久av资源部| 欧美老年两性高潮| 欧美精品一区二区三区在线播放| 欧美激情一区二区三区| 亚洲黄一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 美美哒免费高清在线观看视频一区二区 | 久久久精品免费网站| 欧美精品一区二区三区蜜桃| 精品成人一区二区三区| www精品美女久久久tv| 久久亚洲私人国产精品va媚药| 日本一区二区三级电影在线观看| 国产亚洲欧美一级| 中文字幕一区二区日韩精品绯色| 中文乱码免费一区二区| 亚洲女人的天堂| 国产98色在线|日韩| 99精品视频一区| 在线视频欧美区| 精品国产免费久久| 中文字幕乱码亚洲精品一区| 亚洲午夜激情网站| 青青草原综合久久大伊人精品| 国产高清在线观看免费不卡| 99视频超级精品| 欧美日韩综合色| 91精品国产入口| 久久精品一区四区| 日日摸夜夜添夜夜添精品视频| 免费成人av在线播放| 国产一区二区久久| 色综合天天综合网国产成人综合天| 欧美亚洲国产一区二区三区 | 韩国av一区二区三区| a在线欧美一区| 91成人在线免费观看| 国产亚洲短视频| 亚洲一级二级三级在线免费观看| 麻豆精品视频在线| 91一区二区三区在线播放| 日韩一区二区在线播放| 欧美激情在线观看视频免费| 一区视频在线播放| 麻豆91在线看| gogo大胆日本视频一区| 欧美精品色一区二区三区| 国产日产欧美一区二区视频| 亚洲午夜国产一区99re久久| 国产乱色国产精品免费视频| 日本福利一区二区| 久久综合九色欧美综合狠狠| 一区二区三区丝袜| 国产精品一二二区| 777xxx欧美| 午夜精品久久久久影视| 成人黄色在线视频| 精品福利一区二区三区免费视频| 一区二区三区不卡视频| 国产精品亚洲第一| 久久精品网站免费观看| 轻轻草成人在线| 在线免费观看不卡av| 国产日产欧美精品一区二区三区| 亚洲精品欧美专区| 91黄色在线观看| 国产精品伦理一区二区| 另类成人小视频在线| 欧美亚洲一区二区在线观看| 久久久久久久久久久黄色| 狠狠色丁香婷婷综合久久片| 欧美日韩精品欧美日韩精品| 亚洲日本韩国一区| av一区二区三区黑人| 欧美不卡视频一区| 国产一区二区视频在线| 91精品在线观看入口| 一区二区高清视频在线观看| 99久久婷婷国产综合精品| 精品av久久707| 国产一二精品视频| 精品sm在线观看| 久久99久久99精品免视看婷婷 | 欧美日韩不卡一区二区| 亚洲免费在线观看| 国产69精品一区二区亚洲孕妇| 国产精品人妖ts系列视频| 国产99精品在线观看| 精品国产伦一区二区三区观看体验| 亚洲综合色在线| 欧美综合亚洲图片综合区| 一区二区三区在线免费| 色欧美片视频在线观看在线视频| 久久亚洲免费视频| 91美女精品福利| 一区二区久久久久| 欧美天堂一区二区三区| 亚洲国产成人tv| 国产精品一级黄| 亚洲免费成人av| 欧美在线不卡视频| 日韩成人精品视频| 91精品国产综合久久精品图片 | 精品国产精品网麻豆系列 | 欧美精品 日韩|