SimpleDelegator で Decolator パターンを実装する
SimpleDelegator で Decolator パターンを実装します。
SimpleDelegator についてはるりまを参照ください。
Decolator パターンについてはWikipediaを参照ください。
サンプル
人間のフルネームを表示するプログラムを作ります。
フルネームを表示には以下のパターンがあります。
種類 | 表示 |
---|---|
日本人 | 姓 名 |
日本人疑問形 | 姓 名? |
日本人まとめ記事タイトル風 | 【fullname】姓 名 |
米国人 | 名 姓 |
米国人疑問形 | 名 姓? |
米国人まとめ記事タイトル風 | 【fullname】名 姓 |
これを Decolator パターンで実装します。
(つっこみどころはきにしない)
コード
require 'delegate'
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name, @last_name = first_name, last_name
end
end
class JapaneseDecorator < SimpleDelegator
def fullname
"#{last_name} #{first_name}"
end
end
class AmericanDecorator < SimpleDelegator
def fullname
"#{first_name} #{last_name}"
end
end
class QuestionDecorator < SimpleDelegator
def fullname
"#{super}?"
end
end
class MatomeTitleDecorator < SimpleDelegator
def fullname
"【fullname】#{super}"
end
end
person = Person.new('Joe', 'Hogashi')
puts person.first_name
puts person.last_name
puts AmericanDecorator.new(person).fullname
puts JapaneseDecorator.new(person).fullname
puts QuestionDecorator.new(AmericanDecorator.new(person)).fullname
puts QuestionDecorator.new(JapaneseDecorator.new(person)).fullname
puts MatomeTitleDecorator.new(AmericanDecorator.new(person)).fullname
puts MatomeTitleDecorator.new(JapaneseDecorator.new(person)).fullname
puts MatomeTitleDecorator.new(QuestionDecorator.new(AmericanDecorator.new(person))).fullname
puts MatomeTitleDecorator.new(QuestionDecorator.new(JapaneseDecorator.new(person))).fullname
実行結果
Joe
Hogashi
Joe Hogashi
Hogashi Joe
Joe Hogashi?
Hogashi Joe?
【fullname】Joe Hogashi
【fullname】Hogashi Joe
【fullname】Joe Hogashi?
【fullname】Hogashi Joe?
Author And Source
この問題について(SimpleDelegator で Decolator パターンを実装する), 我々は、より多くの情報をここで見つけました https://qiita.com/tbpgr/items/acf172a09d786e35a1dd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .