デザインパターン/FacrtoryMethod

デザインパターン/Builder

デザインパターン/AbstructFactoryMethod


疎結合にするテク

  1. 単方向依存にする
  2. インターフェイスで最小限タッチさせる
  3. クラスの分割で責任範囲を制限
  4. 継承より委譲

Singletonはグロバール変数なので後々問題が起こる可能性あり


デザインパターンの基本戦略

 具体的な部分は後で取り替えられるようにしておく

テンプレート

処理の流れを抽象化しておく

作業行程(テンプレート)
内部で行う作業
1 "材料を用いてAをする"
2 "材料を用いてBをする"
3 "材料を用いてCをする"
4 "材料を用いてDをする"

依頼可能文 ”材料指定して作業する”

材料指定して作業するとは
 作業1~4を行うこと。

作業工程の系列
具体的作業行程A
A~Dが具体的に何をするのか決めてある。


戦略パターン


戦略
 戦略A
 戦略B

ユーザーが条件αでやれ、
というと、αに応じて戦略Aか戦略Bかを決める。

変化する可能性の高いアルゴリズム(if文分岐など)を(クラスで)分割する

戦略パターン適用前

人間

比較屋
 タイプを決める 次の指定タイプを比較する 年齢、身長
 比較する 二人の人間を指定タイプで比較する。

実行
 人間としてA氏、B氏を取る
 比較屋が比較するタイプとして年齢で比較する事にする
 比較屋にA氏とB氏の比較を依頼する

これを戦略パターンで作るなら


比較屋
 比較が依頼できる存在

比較屋の系列
 年齢比較屋
 身長比較屋

作業者
 頼める比較屋がいる。
 比較する 頼める比較屋に比較を依頼する

この作業者の頼める比較屋は年齢比較屋である。
この作業者に比較を依頼する
 (作業者は、年齢比較屋に比較を依頼する
   年齢比較屋は年齢で比較を行う)

Visitorパターン


訪問者
 ある調査対象クラスを渡して処理を依頼する

調査対象
 訪問者の調査対象
 調査対象は以下の依頼ができる

 依頼 ”私が訪問者です”

調査対象者であるA
 依頼 ”私が訪問者です”というメッセージを受けたら
    訪問者に”掃除してください”と言う

イテレータ(繰り返し)パターン


イテレータ適用前

学生
 聞き取れるメッセージ
  年齢を教えて
  性別を教えて
  あなたの名前と性別は**です。

学生リスト
 聞き取れるメッセージ
  学生を加えて
  *番目の学生は誰ですか
  全部で何人ですか

先生
 先生は学生リストを持つ
 聞き取れるメッセージ
  学生リストを作成して
  学生を点呼して

「学生リストを作成して」と言われたときは
 学生リストにA君を追加
 学生リストにB君を追加

「学生を点呼して」と言われたときは
 学生リストから学生の数を把握して
 1番から最後まで学生の名前を呼ぶ

イテレータ適用後


イテレータ作成機能
 「イテレータ作ってください」

イテレータ
 「次はありますか?」
 「次を下さい」

私の学生リスト
 学生リストの一種。イテレータの作成機能を持つ。

先生
「学生を点呼して」と言われたときは
 学生リストからイテレータを取り出して
 イテレータが次があると言ってる間は
 イテレータから学生を取り出して学生の名前を呼ぶ

アダプターパターン


継承型

価格要求機能
 「価格を教えろ」

商品
 「コストを教えろ」

洗剤(アダプター)
 商品の一種
 価格要求機能を持つ

「価格を教えろ」と言われたら
「コストを教えろ」と言われたのだと思う

委譲型

価格要求機能
 「価格を教えろ」

洗剤(アダプター)
 価格要求機能を持つ
 属性 商品

「価格を教えろ」と言われたら
 洗剤の持っている商品属性に「コストを教えろ」と言う。

生産者が生産物を作る

生産者
 「生産物を作れ」

具体的生産者
 生産者の一種である

 「生産物を作れ」と言われたら
  具体的生産物を作る

Ab Fcパターン

生産者
 「生産物Aを作れ」
 「生産物Bを作れ」

プロトタイプパターン


クローン作成機能
 「クローンを作れ」

ビルダーパターン


 作成者
  「骨組みを作れ」
  「外装を作れ」
  「作成したものをよこせ」

 指揮者
  「作成者は**である。」
  「作成しろ」

 「作成しろ」と言われたら
   作成者に「骨組みを作れ」「外装を作れ」「作成したものをよこせ」
   という。

Compositパターン


リスト
 「実行しろ」
 「加えろ」
 「除け」
 「リストをよこせ」  

「実行しろ」と言われたら
 **をし
 リスト内の要素すべてに「実行しろ」という

Flyweightパターン


 貸し出し屋
  「貸して」

 「貸して」と言われたら
   指定した貸し出し物を渡す。なければ作る。

Bridgeパターン


 食器

 皿
 食器の一種

 ボウル
 食器の一種

 木の皿
 皿の一種

 ガラスボウル
 ボウルの一種

 食器 (皿、ボウル)
  材質という属性を持つ
 材質 (木、ガラス)

デコレータ


A
 「実行しろ」

B
 Aの一種

 「実行しろ」と言われたら
 **をやったうえでAの実行をする

Facadeパターン


 実行者
  「実行しろ」

 「実行しろ」と言われたら
  A、B、Cに対し
  Aへ「作れ」
  Bに「作れ」
  Cに「出せ」
  という。

実行者を通して、A,B,Cを用いる。

Commandパターン


命令
 環境を持つ
 「実行せよ」

Interpreter パターン


Mediator パターン

クラスが多すぎてメッセージのやり取りが複雑化

クラスが通信媒介者を通して通信しあう

Memento パターン

動作を記憶しておく

Observer パターン


観測対象
 観測者のリスト
 「通知せよ」

 「通知せよ」と言われたら
  リストに載っている観測者に通知する

観測者
 「通知です」

 「通知です」と言われたら
  通知内容に従って何かする。

Stateパターン

実行したら次の状態を渡す

状態機能
 「実行して次の状態を返せ」

状態A
 状態機能を持つ 

 「実行して次の状態を返せ」と言われたら
 実行して、状態Bを渡す

状態B
 状態機能を持つ 

 「実行して次の状態を返せ」と言われたら
 実行して、「なんにもない」を渡す


実行者
 状態Aに「実行して次の状態を返せ」といい、
 状態が受け取れたらその状態に同じメッセージを繰り返す。









最終更新:2012年12月13日 10:59