Python
デザインパターン

デザインパターン確認

More than 1 year has passed since last update.

デザインパターンとは

http://doloopwhile.hatenablog.com/entry/20110207/1297068455

Template Method

http://doloopwhile.hatenablog.com/entry/20090627/1275175981
「変わるものを変わらないものから分離する」
→抽象基底クラスを定義して不変な処理は基底クラスに、異なる処理の詳細はサブクラスに任せる。

問題点

基底クラスがこけてしまうとサブクラスが全てこけてしまう。柔軟性に問題がある。
いちいちサブクラスを作るまでもない処理でもクラス定義をしなければならない。

用語

・assert構文

変数が期待する値ではない時に、例外を投げます。
assert 条件式, 条件式がFalseの場合に出力するメッセージ

・フックオブジェクト

Strategy Pattern

http://doloopwhile.hatenablog.com/entry/20090627/1275175960
「変化するアルゴリズムをサブクラスではなく第三者のオブジェクトに移譲する。」

問題点

用語

・ダックタイピング

callメソッド

Observer Pattern

http://doloopwhile.hatenablog.com/entry/20090627/1275175899
「あるオブジェクトに何かが起きた時に、登録されたオブザーバーにそれを通知する。」

通知する側をSubject、通知される側をObserverと言う。
py-notifyというライブラリがあり、そこで実装されている。

注意点

1. 本当に変更が起きたときに通知すること
(変更が起きていない時は通知をしてはいけない)
2. 変更が完了してから通知すること

問題点

用語

Composite Pattern

http://doloopwhile.hatenablog.com/entry/20090627/1275175889
「全階層のオブジェクトを同じように扱えるようにすること」

ケーキを作るときの工程など、順序立てて、いくつかのタスクから構成されているような場合に用いる。
→もっとわかりやすい具体例をいくつか考えよう。

注意点

コンポジットオブジェクトの子コンポーネントが全て葉オブジェクトになってしまう。
使わない方がいいかもしれないらしい

用語

プログラミングにおけるインターフェースとは?

Iterator Pattern

「子オブジェクトに順番にアクセスする方法をもたらす。」

list、dir、stringなどにはIteratorの機能がすでに備わっている。
自分で定義したclassをIteratorにするにはiterメソッドを定義する。
itertoolsライブラリで実装可能。

問題点

用語

Command Pattern

http://doloopwhile.hatenablog.com/entry/20090701/1275175797
「いくつかの選択肢のあるタスクから選ぶ時に使用。」
ボタン1,ボタン2,ボタン3などを押したごとに別の処理が必要な時に使用する。

問題点

用語

Adapter Pattern

「アダプターのように必要なメソッドが存在しない時にギャップを埋めるためのパターン。」

問題点

用語