DP/ INTRO

■Overview
Composite for
オブジェクトが木構造で現れる場合
Proxy for
あるオブジェクトへの多機能で精巧な参照が必要な場合
Prototype for
オブジェクトの生成方法がシステムから独立している場合
Singleton for
あるクラスに対してインスタンスが1つしか存在しないことを保証したい場合
Adapter for
既存のクラスを利用したいがそのIFが必要なIFと一致していない場合
Multicast for
特定のオブジェクトが他のオブジェクトの情報を受け取り その情報を型安全なオブジェクトにカプセル化して転送する場合

Composite
Component, Composite, Leaf

ファイルシステム
要素はFileとDirectory
Directoryの子要素にはDirectory自身を持つこともFileを持つことも可
つまり
木構造

オブジェクト間の関連が木構造となる場合
Compositeパターンが適応できる


Proxy
Subject, Proxy, RealSubject

ファイルシステムにシンボリックリンク機能を追加

※シンボリックリンク:
 FileやDirectoryの実体が存在する場所を
 データとして保持し、実体のように振舞う機能

実体の代理として働くシンボリックリンクは
実体とは異なった場所で定義できたり
実体とは別のアクセス券を定義できたりできる
Windowsでゆうショートカット

代理の働きを行うもの(ショートカットリンク)の作成に Proxyパターンが適応できる

Proxyパターンは
実際のオブジェクトに対して
それを参照している代理 をたて
クライアントに対してその代理によって
あたかも実際にオブジェクトにアクセスしてるかのように見せられる

Prototype
Prototype, ConcretePrototype

FileやDirectoryのコピー
Fileは
Fileのデータ部分をコピーし
Directoryは
Directoryの子要素をコピーする

newFile.setValue(origiralFile.getValue());
的処理の繰り返しでコピーできるが
newFile newDirectory newLinkのいずれを新規用意すべきか
の判定処理が随所に入る上
コピー先で入れ子関係を記憶して行く必要がある

といったケースにPrototypeパターンが適応できる

Prototypeパターンは
プロトタイプ(原型)をコピーすることで
新たなオブジェクトを生成する

うーもう一歩。

Singleton
Singleton

あるクラスのインスタンスがひとつしか存在しないことを保証し
それにアクセスするためのグローバルな方法を提供する

public class Singleton {
  private static Singleton instance;
  public static getInstance() {
    if (instance == null) {
      instance == new Singleton();
    }
    return instance;
  }
  private Singleton() { }
}

な具合

Adapter
Target, Adapter, Adaptee

あるクラスのIFを
クライアントが求める別のIFへ変換できる

public class Adapter extends Adaptee implements Target {
  public viod request() {
    specificRequest(); // Adaptee のメソッドを呼ぶ.
  }
}

TargetをimplしていないAdapteeのメソッドを呼びたいが
Targetをimplしてないといけん時に
AdaterにTargetをimplさせて
Adapter内でAdaptee内のメソッドを呼べばよい

SwingのJTreeとTreeModelは
SpringMVCのViewとModelにあたる
javax.swing.tree.TreeModelを実装したものを
SpringMVCのModelに合わせる必要が生じた場合
等にAdapterが適応できる

MulticastObserver
Source, Listener, ConcreteListener, Event

Observerパターンでは
Subjectが更新されるとObserverのupdate()が呼ばれる
Observerがこの時に更新された情報を得るための方法にpull型とpush型がある

pull型では
ConcreteObserverはConcreteSubjectを直接知っているので
updateの際にConcreteSubjectに更新内容を酔い合わせる

push型では
ConcreteSubjectが
変更を通知するnotify()を行う際に詰め込む変更内容保持Objectを
ConcreteObserverに転送する

push型のメリットは
ConcreteObserverがConcreteSubjectを知らなくてもヨイところ
つまり
依存度が低いところ

しかし、
java.util.Observerのupdate()メソッドの引数から分かるように
Observer側では
Objectクラスを受け取るために型安全が保証されない

Multicastパターンは
push型Observerパターンの型安全版である

Multicastでは
更新内容をEventクラスに含めて転送する
※Eventを利用することからイベントモデルとも言われる

Javaでは
Multicastパターンが非常に多く利用されており
多くのEventの種類がある
それらEventはjava.util.EventObjectクラスを継承している



ref:
http://www.objectclub.jp/technicaldoc/pattern/DPforJavaProgrammers

tag : Multicast Observer Adapter Singleton Prototype Proxy Composite

2009-06-13 12:24 : designpattern : コメント : 0 : トラックバック : 0 :

Strategy Pattern

【*】目的
  データ構造に対して適用する一連のアルゴリズムをカプセル化し、
  アルゴリズムの切り替えを容易にする
  →アルゴリズムの交換

【*】方法
  ・使用者にIFを提供
  ・IFを適用したクラスを作成し 切り出したアルゴリズムを実装
  ・使用者は 条件に合うアルゴリズムクラスを生成
   IFを使用してアルゴリズムを実行

【*】利点
  アルゴリズムをカプセル化することで
  アルゴリズムの実行にIFを使用できる
  →拡張性と保守性を向上し 再利用が可能になる

ref:
http://www.nulab.co.jp/designPatterns/designPatterns2/designPatterns2-3.html

tag : Strategy Pattern design pattern

2009-02-09 02:19 : designpattern : コメント : 0 : トラックバック : 0 :

Singleton Pattern

Singletonとは
「1枚札」のこと。
Singletonパターンとは、
唯一の存在を保証する為のパターン。

あるクラスのインスタンスが一つしかないことを保障したい場合、
注意深く設計すれば、実現かのうだが、保障はない。
で、
Singletonパターン。

Singletonパターンは、
コンストラクタをprivateとすることで、
他のクラスから新たにインスタンスが生成されないような構成で
インスタンスの生成を制御する。

ref:
http://www.techscore.com/tech/DesignPattern/Singleton.html

tag : Singleton Pattern GoF

2008-08-05 23:16 : designpattern : コメント : 0 : トラックバック : 0 :

Factory Method Pattern

オブジェクトの生成方法に工夫を加えて、
より柔軟なオブジェクト生成することが目的。

FactoryMethodパターンは、
インスタンスの生成をサブクラスに行わせることで、
より柔軟な生成するインスタンスの選択を可能にする。

FactoryMethodパターンでは、
オブジェクトの生成を担うメソッド(factory method)を通して
間接的にオブジェクトを生成する。
メソッドを介することで、直接new Object()とするより
柔軟性に優れる。

ref:
http://www.techscore.com/tech/DesignPattern/FactoryMethod.html

tag : GoF Factory Method パターン

2008-07-19 11:07 : designpattern : コメント : 0 : トラックバック : 0 :

Template Method Pattern

templateは。「文字の形に穴が開いている薄いプラスチック板」のこと。
その穴をペンでなぞれば、手書きでも綺麗な文字が書けるわけ。
ペンなのか、マジックなのか、鉛筆なのか、筆なのか。
仕上がりは違うけど同じ文字が書ける。
templateは、形を決定する枠組みを提供するだけ。

TemplateMethodパターンは、
テンプレートの機能を持つパターン
スーパークラスで処理の枠組みを決め、
サブクラスでその具体的内容を実装する。
スーパークラスでは、
アルゴリズムの流れの中で利用される抽象的メソッドと、
この抽象的なメソッドを利用した処理のアルゴリズムを定義するTemplateMethodを定義する。


ref:
http://www.techscore.com/tech/DesignPattern/TemplateMethod.html

tag : GoF Template Method パターン

2008-07-16 00:53 : designpattern : コメント : 0 : トラックバック : 0 :

Adapter Pattern

adapterは「適合させる」ゆう意味。
Adapterパターンは、
インタフェースに互換性のないクラス同士を組み合わせることが目的のパターン

これまで利用していたメソッドAと同じ機能を、選りすぐれた形で提供するメソッドBを発見。が、
メソッドBは、メソッドAとは異なるインタフェースを実装しているため、
メソッドBを使用するには、あれこれ変更が必要。大変。
で、
メソッドAとメソッドBの違いを吸収するAdapterを準備。
少ない変更で新しいメソッドに乗り換えられる!

この目的のために
Adapterパターンは2つの方法を与えている。
一つは、継承する方法。もう一つは、委譲しちゃう方法。

ref:
http://www.techscore.com/tech/DesignPattern/Adapter.html

tag : GoF Adapter パターン

2008-07-15 22:20 : designpattern : コメント : 0 : トラックバック : 0 :

Iterator Pattern

「繰り返す」ゆう意味。
日本語で「反復子」
Iteratorパターン
要素の集まりを保有するオブジェクトの各要素に順番にアクセスする方法を提供する為のパターン

たとえば

集約オブジェクトとしてListクラスを想定する。
Listクラスは、要素としていくつかのオブジェクトを持てる。
このListオブジェクトが持つ要素に順番にアクセスするような場合、
そのような順番で各要素にアクセスするかによって、様々さ走査方法がある。
名前順だったり、パラメータを利用した順番だったり。
これら走査方法は、Listでは提供していない。
目的によっても異なるし、沢山あるから、Listには用意し切れない。
で、
走査方法を与えるクラスをListとは別に独立させておき、
必要な走査方法を与えるクラスをユーザが自分で作成する。
結果、より柔軟な設計ができる。
プラス、
集約オブジェクトのクラスが変更になっても、影響範囲を小さく出来る。


Iteratorパターンでは、
何らかの集約体が必ずAggregateインタフェースを実装するようにしてる。
Aggregateとは、
「集合」ゆう意味で、Aggregateインタフェースでは、
Iteratorインタフェースの実装クラスを返す、iterator()メソッドを定義してるだけ。
Interatorインタフェースは、
この集約体をメンバ変数として持ち、
この集約体に次の要素が存在するかしないかをbooleanで返すhasNext()メソッドと、
次の要素を返すnext()メソッドを定義している。

ref:
http://www.techscore.com/tech/DesignPattern/Iterator.html

tag : Gof Iterator パターン

2008-07-15 22:18 : designpattern : コメント : 0 : トラックバック : 0 :

J2EEパターン

J2EEプラットフォームは多層システムから成る。
・client層:client application, etc.
・presentation層:receive the request from client.
・business層:business logic and kepping data.
・integration層:manage the connection of outer resource like db.
・resource層:outer system like database.

J2EEパターンもこの多層システムに基づいて構成されている。

・patterns of presentation phase
 ・Intercepting Filter Pattern
  リクエストの前後処理を行う。
 ・Front Controller Pattern
  リクエスト処理を集中して管理するためのコントローラを提供する。
 ・View Helper Patter
  表示用の整形に関係ないロジックをヘルパコンポーネントにカプセル化する。
 ・Composite View Pattern
  原始的なサブコンポーネントから構成されたビューを生成する。
 ・Service to Worker Pattern
  ディスパッチャコンポーネントを使ってFrontControllerPatternとViewHelperPatternとを結合し、より多くの仕事をビューに処理させる。

・patterns of business phase
 ・Business Delegate Pattern
  プレゼン層とビジネス層とを切り離し、サービスに対するファサードやプロキシの役割を持つインタフェースを提供する。
 ・Value Object Pattern
  ネットワークのトラフィックを減らして、層と層の間のデータ交換を行う。
 ・Session Facade Pattern
  ビジネスオブジェクトの複雑さを隠蔽するために、ワークフローの処理を一箇所に纏める。
 ・Composite Entity Pattern
  依存関係にある複数の永続オブジェクトを1つのエンティティBeanに纏めて、粗粒度のエンティティBeanを設計する。
 ・Value Object Assembler Pattern
  複数のデータソースから複合バリューオブジェクトを組み立てる。
 ・Value List Handler Pattern
  問い合わせの実行と結果のキャッシュ、および結果の処理方法を管理する。
 ・Service Locator Pattern
  複雑なビジネスサービスの検索や生成の処理をカプセル化し、ビジネスサービスのファクトリを検索する。

・patterns of integration phase
 ・Data Access Object Pattern
  データソースを抽象化し、データに対する透過的なアクセスを提供する。
 ・Service Activator Pattern
  EJBコンポーネントの非同期処理を行う。


ref:
http://www.techscore.com/tech/J2EEPattern/introduction2.html
2008-07-15 07:20 : designpattern : コメント : 0 : トラックバック : 0 :

The GoF's 23 Design Patterns

■デザインパターン
様々なプログラムで再利用できる汎用的な設計パターンのこと。

■ゴフデザインパターン
GoF(The Gang Of Four) Design Pattern
GoFが考えたオブジェクト指向プログラミングに役立つ23つデザインパターン
ref:GoF, "Design Patterns : Elements of Reusable Object Oriented Software", 1995
  (オブジェクト指向における再利用のためのデザインパターン)

■The GoF's 23 Design Patterns
 □生成
  -FactoryMethod
  -AbstractFactory
  -Builder
  -Prototype
  -Singleton
 □構造
  -Adapter
  -Bridge
  -Composite
  -Decorator
  -Facade
  -Flyweight
  -Proxy
  -TemplateMethod
 □振舞
  -Interpreter
  -Chain of Responsibility
  -Command
  -Iterator
  -Mediator
  -Memento
  -Observer
  -State
  -Strategy
  -Visitor
  

■Various Design Patterns and Idioms
 □生成
  -Monostate
 □構造
  -GenerationGap
  -RoleObject
 □振舞
  -TypedMessage
  -HierarchicalVisitor
  -ComponentBus
  -CacheManager
  -ObjectPool
 □平行性
  -DoubleCheckedLocking


ref:
http://itpro.nikkeibp.co.jp/article/COLUMN/20051123/225074/
http://www002.upp.so-net.ne.jp/ys_oota/mdp/
2008-02-26 06:41 : designpattern : コメント : 0 : トラックバック : 0 :
ホーム

search

ad



counter


tag cloud

category cloud