Javaで学ぶデザインパターン入門をRubyで書いてみた(decoratorパターン)
初投稿です😊 ウィンブルドンについてはまだ語りません(テニス始めたの2018/11/1です爆笑) アドベントカレンダーに初参加&人生で初記事 特に思いつかなかったので、この前社内の勉強会でやったもの載せます笑
有名なGoFのデザインパターンの本ですね!✨
どの言語でも必須のデザインパターン。
書籍内のJavaコードをRubyコードに書き換えるのはそれはそれで勉強になるのではないか?
となり5.6名でモブプロをしながらあーだこーだ言いながら輪読後に書き換えをしました。
実際動かして綺麗に結果が出ると感動します笑
下記のソースはとりあえず動くようにはなっています。
そんな書き方じゃないだろ!!!とかあったらビシバシコメント下さい🙇♂️(Ruby初心者なので。。。)
Javaの元コードは書籍を買うか、エンジニアがいる会社なら誰かしら持っていると思うので頑張って下さい笑
decoratorパターンをRubyで書いてみました! 実行結果が一番キラキラしていた笑
class Display def columns raise NotImplementedError end def rows raise NotImplementedError end def row_text(row) raise NotImplementedError end def show rows.times do |num| puts row_text(num) end end end class StringDisplay < Display def initialize(string) @string = string end #initializeと同じだからいらん? def srting_display(string) @string = string end def columns @string.length end def rows 1 end def row_text(row) row.zero? ? @string : nil end end class Border < Display def initialize(display) @display = display end end class SideBorder < Border def initialize(display, side_char) super(display) @border_char = side_char end def columns 1 + @display.columns + 1 end def rows @display.rows end def row_text(row) @border_char + @display.row_text(row) + @border_char end end class FullBorder < Border def initialize(display) super(display) @display = display end def columns 1 + @display.columns + 1 end def rows 1 + @display.rows + 1 end def row_text(row) if row.zero? "+" + make_line('-', @display.columns) + "+" elsif row == @display.rows + 1 "+" + make_line('-', @display.columns) + "+" else "|" + @display.row_text(row - 1) + "|" end end def make_line(full_char, count) buffer = "" count.times do buffer << full_char end buffer end end class Main def main b1 = StringDisplay.new("Hello, world.") b2 = SideBorder.new(b1, "#") b3 = FullBorder.new(b2) b1.show b2.show b3.show b4 = SideBorder.new( FullBorder.new( FullBorder.new( SideBorder.new( FullBorder.new( StringDisplay.new("hello") ), '*' ) ) ), '/' ) b4.show end end Main.new.main
実行結果
最初にnewしたインスタンスに対してどんどん飾り付けしていくパターンですね!(雑!!!)
12. Decorator パターン | TECHSCORE(テックスコア)
ここ見ておけば問題ないですね!
では終わります笑