Ruby 는 디자인 모드 의 프 록 시 모드 와 장식 모드 의 코드 인 스 턴 스 를 사용 합 니 다.

7081 단어 Ruby디자인 모드
에이전트 모드
필요:
샤 오 밍 은 샤 오리 에 게 그 를 대신 해서 샤 오 리 를 쫓 아 오 라 고 했다.
프 록 시 코드 없 음:

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

장식 모드
 
필요:
다른 의상 을 입 히 는 거 예요.
코드 버 전 1

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

" 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
이렇게 쓰 면 기능 이 실 현 됐 는데,문 제 는'슈퍼맨'분장 을 추가 하면 퍼 슨 류 를 수정 해 개방-폐쇄 원칙 을 위반 한 다 는 것 이다.
 
코드 버 전 2

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

class Person
 attr_accessor :name
 
 def initialize(name)
  @name = name
 enddef show
  puts "*****   #{name}

" 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
이렇게 바 꾼 뒤 슈퍼맨 분장 을 늘 리 면 퍼 슨 류 를 고 칠 필요 가 없 는 것 은 사실이다.문 제 는 각종 옷 이 독립 적 이 고 외부 에 노출 된 것 은 한 벌 씩 입 는 것 이 며 순서 가 없고 통제 가 없다 는 것 이다.
코드 버 전 3

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

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

" 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

좋은 웹페이지 즐겨찾기