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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 단일 메소드 및 단일 클래스 상세 정보단일 방법 Ruby는 단일 객체에만 적용되는 단일 객체 추가 방법을 단일 방법이라고 합니다. 또한 위에서 사용한 정의 방법 외에 Object#define_를 통해singleton_method 방법으로 단일 방법 정의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.