Ruby Compositeパターン
はじめに
構造がきれいな設計のために、デザインパターンを再学習しています。
今回はCompositeパターンを扱います。
環境
Ruby 2.3.0
概要
構造に関するパターンのひとつです。
Compositeパターンは、木構造、階層構造、ツリー構造のオブジェクトを作りたいときに
上位のオブジェクトとか単一のオブジェクトかを考えさえせたくないときに利用できます。
例えば、ディレクトリ(上位オブジェクト)とファイル(単一オブジェクト)の構造の場合に、ディレクトリもファイルも同一視できます。
GoFいわく「全体が部分のように振る舞う」テクニックとのこと。
また、Compositeとは英語で「複合的」という意味です。
コード
Componentを継承して、ファイルとディレクトリを作成しています。
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)
参考
Author And Source
この問題について(Ruby Compositeパターン), 我々は、より多くの情報をここで見つけました https://qiita.com/Gupi/items/8eb7bf6673507ab707c2著者帰属:元の著者の情報は、元の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 .