1. Gupi

    Posted

    Gupi
Changes in title
+Ruby Compositeパターン
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,70 @@
+
+##はじめに
+構造がきれいな設計のために、デザインパターンを再学習しています。
+今回はCompositeパターンを扱います。
+
+
+##環境
+Ruby 2.3.0
+
+
+##概要
+構造に関するパターンのひとつです。
+Compositeパターンは、木構造、階層構造、ツリー構造のオブジェクトを作りたいときに
+上位のオブジェクトとか単一のオブジェクトかを考えさえせたくないときに利用できます。
+
+例えば、ディレクトリ(上位オブジェクト)とファイル(単一オブジェクト)の構造の場合に、ディレクトリもファイルも同一視できます。
+
+GoFいわく「全体が部分のように振る舞う」テクニックとのこと。
+また、Compositeとは英語で「複合的」という意味です。
+
+
+###コード
+Componentを継承して、ファイルとディレクトリを作成しています。
+
+
+```ruby:Strategy.rb
+class Component
+ attr_accessor :name
+ def initialize(name)
+ @name = name
+ end
+end
+
+class FileComponent < Component
+ def initialize(name)
+ super(name)
+ end
+end
+
+class DirectoryComponent < Component
+ def initialize(name)
+ super(name)
+ @components = []
+ end
+
+ def add(component)
+ @components << component
+ end
+
+ def remove(component)
+ @components.delete(component)
+ end
+
+end
+
+picture = DirectoryComponent.new("PICTURE")
+picture.add(FileComponent.new("child.jpg"))
+picture.add(FileComponent.new("car.jpg"))
+picture.add(FileComponent.new("landscape.jpe"))
+
+usb = DirectoryComponent.new("UsbDevice")
+usb.add(picture)
+
+```
+
+
+##参考
+- [Rubyによるデザインパターン](https://www.amazon.co.jp/exec/obidos/ASIN/4894712857/orangain-22/)
+- [増補改訂版Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=sr_1_1?ie=UTF8&qid=1487168180&sr=8-1&keywords=java+%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)
+