SlideShare a Scribd company logo
1 of 14
Builderによる
Compositeの隠蔽
パターン指向リファクタリング入門(PDF: P.130~)
BuilderによるCompositeの隠蔽 (P.130)
▪ Compositeの構造処理が何度も出現したり、
複雑であったり、あるいはエラーを起こしやすいものになっている。
TagNode多すぎィ!
2
BuilderによるCompositeの隠蔽 (P.130)
▪ 詳細部分をBuilderに任せることで、構築を単純化する。
TagBuilder1回呼び出すだけ
TagNodeをTagBuilderで
隠蔽する 3
動機 (P.131)
1. 複数オブジェクトを生成するクライアントコードを単純化するため
▪ オブジェクトの生成に関する難解で面倒な部分をBuilderが実装していれば,クラ
イアントは,生成がどのように行われるかを知らなくても,Builderに生成を指示す
ることができる。
▪ 例:親ノードに子ノードを追加するときにクライアントで行う操作
4
新しいノードをインスタンス化
新しいノードを初期化
新しいノードを正しい
親ノードに適切に追加
操作不要
根のノードが分かれば
操作不要
動機 (P.131)
2. クライアントコードとCompositeコードとを切り離すため
▪ 前回の「Compositeによる暗黙的なツリー構造の置き換え」を行ったとき
に発生する問題
▪ クライアントコードとCompositeコードが緊密に結合していると,
Compositeの実装を変更するのが困難になる。
5
▪ 例:クライアントコードとDOMのインタフェース/クラスを切り離す
6
Clientと直接
関連をもつ
DOMBuilderでワンクッション挟む
→環境構築(更新)が容易になる
(新しいVer.のDOMへの入れ替え等)
Builderパターンの目的 (P.131)
▪ 複数オブジェクトについて、その作成過程を表現形式に依存しな
いものにすることにより、同じ作成過程で異なる表現形式のオブ
ジェクトを生成できるようにする。 ー GoF [DP、105
ページより引用]
▪ 作成過程を表現形式に依存しないものにする
▪ →子ノードが増えても、クライアントに子ノードのことを書かない
▪ 同じ作成過程で異なる表現形式
▪ →Compositeを隠蔽しているだけなので作成過程は変わっていない
▪ →Builderで隠蔽しているので表現形式が異なる
7
Builderの補足 (P.131)
▪ Builderが提供するサービス
▪ 異なる表現形式のオブジェクトを生成できる
▪ 構築を単純化する
▪ クライアントコードと複合オブジェクトを切り離す
▪ 概要はわかりやすく詳細がわかりづらいBuilder
▪ Builderのインタフェースは明確に意図が伝わるものでなければならない
▪ が、構築を単純化するために詳細な部分は隠蔽しているため見えづらい
▪ 詳細を知るにはBuilderの実装/テストコード/ドキュメントを要チェック
8
利点・欠点 (P.133)
Good Point
▪ Compositeを構築するクライアントコードを単純化できる。
▪ Compositeの生成にまつわる繰り返しやエラーを軽減できる。
▪ クライアントとCompositeの間の結合度が低くなる
▪ カプセル化されたCompositeや複合オブジェクトを異なった形式で表現できる
Bad Point
▪ インタフェースの意図が伝わりにくくなる可能性がある
9
手順 (P.133-134)
基本の流れ。適宜カスタマイズしてね。
1. 新しいBuilderクラスを作る
2. Builderが子ノードを構築できるようにする
3. ノードの属性や値をBuilderが設定できるようにする
4. 作成したBuilderをClientがどの程度簡単に使えるのか見直し、手直す。
5. 新しいBuilderをComposite構築コードをリファクタリングする。
10
例 (P.134)
11
本読みながらで
いいかな?
新しく作成したBuilderの性能改善
▪ (詳しい説明の必要性を感じなかった)
▪ Builderに対して性能改善を施した。
▪ Compositeを隠蔽したように,性能改善ロジックもカプセル化したので,Builderのユーザか
ら見ると何も変わっていないのに性能が良くなった。
12
StringBufferが原因なら
Builderじゃなくても
ユーザ影響少なそう。
変化形:スキーマベースのBuilder
▪ XMLスキーマをTreeSchemaに変換するとかどうとか
▪ たぶんXMLにしか使えない。
13
難しいので
みんなで読みましょう
14

More Related Content

Viewers also liked

カスタムLSIが道具になるために
カスタムLSIが道具になるためにカスタムLSIが道具になるために
カスタムLSIが道具になるためにJunichi Akita
 
Tet 2014 with 10D7-12D7
Tet 2014 with 10D7-12D7Tet 2014 with 10D7-12D7
Tet 2014 with 10D7-12D7Viet Vo
 
QGISやってみた 人口動態データのプロット
QGISやってみた 人口動態データのプロットQGISやってみた 人口動態データのプロット
QGISやってみた 人口動態データのプロットKatsuhiro Morishita
 
BANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEMBANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEMAPI Meetup
 
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...Insight Technology, Inc.
 
The Path to Wellness through Big Data
The Path to Wellness  through Big Data The Path to Wellness  through Big Data
The Path to Wellness through Big Data Hortonworks
 
2012151039 임종원 기말 과제 인터랙션 디자인
2012151039 임종원 기말 과제 인터랙션 디자인2012151039 임종원 기말 과제 인터랙션 디자인
2012151039 임종원 기말 과제 인터랙션 디자인Jong Won Lim
 
Teori Kognitif Lev vygotsky
Teori Kognitif Lev vygotskyTeori Kognitif Lev vygotsky
Teori Kognitif Lev vygotskyIzzat Najmi
 
WSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdm
WSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdmWSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdm
WSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdmYahoo!デベロッパーネットワーク
 
Apigee+OASでらくらくAPI開発(予定)
Apigee+OASでらくらくAPI開発(予定)Apigee+OASでらくらくAPI開発(予定)
Apigee+OASでらくらくAPI開発(予定)Kazuchika Sekiya
 
02. 한국의 자동차산업 (이장명 교수)
02. 한국의 자동차산업 (이장명 교수)02. 한국의 자동차산업 (이장명 교수)
02. 한국의 자동차산업 (이장명 교수)University of Ulsan
 
検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight
検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight
検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnightYahoo!デベロッパーネットワーク
 
Apache Ambari - What's New in 2.4
Apache Ambari - What's New in 2.4 Apache Ambari - What's New in 2.4
Apache Ambari - What's New in 2.4 Hortonworks
 
Dental composite /certified fixed orthodontic courses by Indian dental academy
Dental composite /certified fixed orthodontic courses by Indian dental academy Dental composite /certified fixed orthodontic courses by Indian dental academy
Dental composite /certified fixed orthodontic courses by Indian dental academy Indian dental academy
 
Dentin bonding agents /certified fixed orthodontic courses by Indian dental ...
Dentin bonding agents  /certified fixed orthodontic courses by Indian dental ...Dentin bonding agents  /certified fixed orthodontic courses by Indian dental ...
Dentin bonding agents /certified fixed orthodontic courses by Indian dental ...Indian dental academy
 

Viewers also liked (20)

カスタムLSIが道具になるために
カスタムLSIが道具になるためにカスタムLSIが道具になるために
カスタムLSIが道具になるために
 
Biblnk
BiblnkBiblnk
Biblnk
 
HMG Awards
HMG AwardsHMG Awards
HMG Awards
 
Tet 2014 with 10D7-12D7
Tet 2014 with 10D7-12D7Tet 2014 with 10D7-12D7
Tet 2014 with 10D7-12D7
 
Diseño electrico
Diseño electricoDiseño electrico
Diseño electrico
 
QGISやってみた 人口動態データのプロット
QGISやってみた 人口動態データのプロットQGISやってみた 人口動態データのプロット
QGISやってみた 人口動態データのプロット
 
BANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEMBANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEM
 
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
 
The Path to Wellness through Big Data
The Path to Wellness  through Big Data The Path to Wellness  through Big Data
The Path to Wellness through Big Data
 
2012151039 임종원 기말 과제 인터랙션 디자인
2012151039 임종원 기말 과제 인터랙션 디자인2012151039 임종원 기말 과제 인터랙션 디자인
2012151039 임종원 기말 과제 인터랙션 디자인
 
Teori Kognitif Lev vygotsky
Teori Kognitif Lev vygotskyTeori Kognitif Lev vygotsky
Teori Kognitif Lev vygotsky
 
WSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdm
WSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdmWSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdm
WSDM2016報告会−論文紹介(Beyond Ranking:Optimizing Whole-Page Presentation)#yjwsdm
 
Apigee+OASでらくらくAPI開発(予定)
Apigee+OASでらくらくAPI開発(予定)Apigee+OASでらくらくAPI開発(予定)
Apigee+OASでらくらくAPI開発(予定)
 
02. 한국의 자동차산업 (이장명 교수)
02. 한국의 자동차산업 (이장명 교수)02. 한국의 자동차산업 (이장명 교수)
02. 한국의 자동차산업 (이장명 교수)
 
Kafka通常オペレーションで遭遇する問題集 #kafkajp
Kafka通常オペレーションで遭遇する問題集 #kafkajpKafka通常オペレーションで遭遇する問題集 #kafkajp
Kafka通常オペレーションで遭遇する問題集 #kafkajp
 
検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight
検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight
検索クエリの時間差を可視化することでわかる人の行動パターン #yjdsnight
 
Apache Ambari - What's New in 2.4
Apache Ambari - What's New in 2.4 Apache Ambari - What's New in 2.4
Apache Ambari - What's New in 2.4
 
Dental composite /certified fixed orthodontic courses by Indian dental academy
Dental composite /certified fixed orthodontic courses by Indian dental academy Dental composite /certified fixed orthodontic courses by Indian dental academy
Dental composite /certified fixed orthodontic courses by Indian dental academy
 
Dentin bonding agents /certified fixed orthodontic courses by Indian dental ...
Dentin bonding agents  /certified fixed orthodontic courses by Indian dental ...Dentin bonding agents  /certified fixed orthodontic courses by Indian dental ...
Dentin bonding agents /certified fixed orthodontic courses by Indian dental ...
 
online fixed orthodontics course
online fixed orthodontics courseonline fixed orthodontics course
online fixed orthodontics course
 

More from Syoko Matsumura

人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca
人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca
人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkccaSyoko Matsumura
 
女性エンジニアコミュニティの作り方 #fuller_lt
女性エンジニアコミュニティの作り方 #fuller_lt女性エンジニアコミュニティの作り方 #fuller_lt
女性エンジニアコミュニティの作り方 #fuller_ltSyoko Matsumura
 
社会に出る前に知っておきたかったnのこと
社会に出る前に知っておきたかったnのこと社会に出る前に知っておきたかったnのこと
社会に出る前に知っておきたかったnのことSyoko Matsumura
 
1日を36時間にするたったひとつの方法
1日を36時間にするたったひとつの方法1日を36時間にするたったひとつの方法
1日を36時間にするたったひとつの方法Syoko Matsumura
 
エンプラYouは何してる?
エンプラYouは何してる?エンプラYouは何してる?
エンプラYouは何してる?Syoko Matsumura
 
エンプラYouは何してる?
エンプラYouは何してる?エンプラYouは何してる?
エンプラYouは何してる?Syoko Matsumura
 

More from Syoko Matsumura (9)

人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca
人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca
人見知りでもイベントを楽しめる!!〜リアルとネットをつなぐ〜 #mlkcca
 
女性エンジニアコミュニティの作り方 #fuller_lt
女性エンジニアコミュニティの作り方 #fuller_lt女性エンジニアコミュニティの作り方 #fuller_lt
女性エンジニアコミュニティの作り方 #fuller_lt
 
社会に出る前に知っておきたかったnのこと
社会に出る前に知っておきたかったnのこと社会に出る前に知っておきたかったnのこと
社会に出る前に知っておきたかったnのこと
 
女子力高まるJs
女子力高まるJs女子力高まるJs
女子力高まるJs
 
1日を36時間にするたったひとつの方法
1日を36時間にするたったひとつの方法1日を36時間にするたったひとつの方法
1日を36時間にするたったひとつの方法
 
JSつまみぐい
JSつまみぐいJSつまみぐい
JSつまみぐい
 
Let’s angular js!!
Let’s angular js!!Let’s angular js!!
Let’s angular js!!
 
エンプラYouは何してる?
エンプラYouは何してる?エンプラYouは何してる?
エンプラYouは何してる?
 
エンプラYouは何してる?
エンプラYouは何してる?エンプラYouは何してる?
エンプラYouは何してる?
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Builderによるcompositeの隠蔽