麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

Ruby使用設(shè)計(jì)模式中的代理模式與裝飾模式的代碼實(shí)例

2020-10-29 19:36:26
字體:
供稿:網(wǎ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} 送你巧克力" endend#被追求者類class Girl attr_accessor :name  def initialize(name)  @name = name endendxiao_hong = Girl.new('小紅')xiao_ming = Pursuit.new(xiao_hong)xiao_ming.give_dollsxiao_ming.give_flowersxiao_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} 送你巧克力" endend#被追求者類class Girl attr_accessor :name  def initialize(name)  @name = name endendxiao_hong = Girl.new('小紅')xiao_ming = Proxy.new(xiao_hong)xiao_ming.give_dollsxiao_ming.give_flowersxiao_ming.give_chocolate

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

實(shí)際的代理模式代碼:

# -*- encoding: utf-8 -*-#公共接口modulemodule GiveGift def give_dolls end  def give_flowers end  def give_chocolate endend#追求者類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}送你巧克力" endend#代理類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 endend#被追求者類class Girl attr_accessor :name  def initialize(name)  @name = name endendxiao_hong = Girl.new('小紅')xiao_ming = Proxy.new(xiao_hong)xiao_ming.gg.name = '小明'xiao_ming.give_dollsxiao_ming.give_flowersxiao_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 '領(lǐng)帶' end  def wear_leather_shoes  puts '皮鞋' end  def show  puts "*****裝扮的#{name}/n/n" endendxc=Person.new('小菜')puts "******第一種裝扮"xc.wear_t_shirtsxc.wear_big_trouserxc.wear_sneakersxc.showputs "******第二種裝扮"xc.wear_suitxc.wear_tiexc.wear_leather_shoesxc.show

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

 

代碼版本二

# -*- encoding: utf-8 -*-class Person attr_accessor :name  def initialize(name)  @name = name enddef show  puts "*****裝扮的#{name}/n/n" endendclass Finery def show endendclass TShirts < Finery def show  puts '大T恤' endendclass BigTrouser < Finery def show  puts '垮褲' endendclass Sneakers < Finery def show  puts '破球鞋' endendclass Suit < Finery def show  puts '西裝' endendclass Tie < Finery def show  puts '領(lǐng)帶' endendclass LeatherShoes < Finery def show  puts '皮鞋' endendxc=Person.new('小菜')ts = TShirts.newbt = BigTrouser.newsk = Sneakers.newputs "******第一種裝扮"ts.showbt.showsk.showxc.showsuit = Suit.newtie = Tie.newls = LeatherShoes.newputs "******第二種裝扮"suit.showtie.showls.showxc.show

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

代碼版本三

# -*- encoding: utf-8 -*-class Person attr_accessor :name  def initialize(name=nil)  @name = name end  def show  puts "*****裝扮的#{name}/n/n" endendclass Finery < Person attr_accessor :componet def decorate(componet)  @componet = componet end def show  componet.show if componet endendclass TShirts < Finery def show  super  puts '大T恤' endendclass BigTrouser < Finery def show  super  puts '垮褲' endendclass Sneakers < Finery def show  super  puts '破球鞋' endendclass Suit < Finery def show  super  puts '西裝' endendclass Tie < Finery def show  super  puts '領(lǐng)帶' endendclass LeatherShoes < Finery def show  super  puts '皮鞋' endendxc=Person.new('小菜')ts = TShirts.newbt = BigTrouser.newsk = Sneakers.newputs "******第一種裝扮"ts.decorate xcbt.decorate tssk.decorate btsk.showsuit = Suit.newtie = Tie.newls = LeatherShoes.newputs "******第二種裝扮"suit.decorate xctie.decorate suitls.decorate btls.show

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 狠狠干夜夜操 | 欧美一级免费视频 | 日本网站一区二区三区 | av国产片 | 在线观看中文字幕国产 | 亚洲成人福利电影 | 久久国产一二区 | 久久精品亚洲一区二区三区观看模式 | 黄色一级片免费在线观看 | 一级黄色片武则天 | 久草干 | 久草成人在线观看 | 成年人在线视频免费 | 99麻豆久久久国产精品免费 | 手机在线看片国产 | 香蕉久久久久 | 亚洲国产超高清a毛毛片 | 中国免费一级毛片 | 久久久久国产精品久久久久 | 国产一区二区三区视频在线 | 最新一区二区三区 | 在线91视频 | 免费黄色在线观看网站 | 在线视频 亚洲 | 久久精品视频69 | 综合99| 男男羞羞视频网站国产 | 国产成人在线观看免费 | 曰韩精品 | 午夜国产在线观看 | 色99999| 一区二区三区在线观看免费视频 | 最新中文字幕第一页视频 | 黄色片免费视频 | 国产精品免费大片 | 久草在线观看资源 | 日韩欧美精品电影 | 日本高清黄色片 | 免费在线国产 | 亚洲视频观看 | 国产一区二区三区视频在线 |