GOFデザインパターンをPythonで - Mediator
こちらの写経です。
Mediator
オブジェクト間で調整が必要な場合の取りまとめを行う。
オブジェクト同士がお互いを参照しあうことがないようにして、低結合を保つ。
GOFデザインパターンをPythonで - Facade
こちらの写経です。
Facade
複数のクラスやメソッドを呼び出す場合、クライアントが呼び出し順などを意識する必要のないよう、一連の処理をまとめて、一つのインターフェイスで提供する。
ここでは各TCクラスのメソッド呼び出しをTestRunnerのrunAll()でひとまとめにして一つのインターフェイスを提供している。
参考
15.Facadeパターン | TECHSCORE(テックスコア)
http://www.techscore.com/tech/DesignPattern/Facade.html/
GOFデザインパターンをPythonで - Decorator
こちらの写経です。
Decorator
あるクラスに機能を追加したい場合、DecoratorはDecorateeを引数にとるなどしてインターフェイスを同一視して機能拡張が可能。
参考
12. Decorator パターン | TECHSCORE(テックスコア)
http://www.techscore.com/tech/DesignPattern/Decorator.html/
GOFデザインパターンをPythonで - Strategy
こちらの写経です。
Strategy
状況によってアルゴリズムを変更する必要がある場合に有効。
if分の分岐内にアルゴリズムをかき分ける必要がなくなる。
各アルゴリズムをカプセル化しアルゴリズムを呼び出すインターフェイスのみ提供する。
クライアントはそのアルゴリズムの実装については知っている必要がない。
参考
10. Strategy パターン | TECHSCORE(テックスコアhttp://www.techscore.com/tech/DesignPattern/Strategy.html/
how is this Strategy Pattern written in Python? (the sample in Wikipedia) - Stack Overflow
http://stackoverflow.com/questions/963965/how-is-this-strategy-pattern-written-in-python-the-sample-in-wikipedia
GOFデザインパターンをPythonで - Builder
こちらの写経です。
Builder
具体的な作成物を作成過程に依存しないものにすることで、同じ作成過程で異なるモノを作成することが可能。
ここではDirectorクラスはAbstract ClassであるBuilderクラスのメソッド呼び出す。
具体的に作成するモノについてはBuilderクラスを継承したConcrete BuilderのBuilderHouse、BuilderFlatに記述する。
今後、作成物が追加される場合はConcrete Builderを追加するだけで良い。
GOFデザインパターンをPythonで - Template Method
こちらの写経です。
Tmeplate Method
アルゴリズムのひな形(Skeleton)となるクラスを作成、具体的な処理はサブクラスの定義に任せる。
ここではSkeletonクラスではなくSkeletonメソッドを用意し、
make_template()でSkeletonに任意の関数オブジェクト(ここではGettersとActions)を渡して具体的な処理を行わせています。
参考
faif/python-patterns
https://github.com/faif/python-patterns
The GITS Blog » Six GoF design patterns, Python style
http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/
iOSのMVCパターンにおけるViewControllerの役割について
iOSのViewControllerの役割がよくわからないので少し調べました。
結局まだよくわかっていないのですが、以下のように書くとうまくいきそうな気がしました。
View -> XIB, UIViewのサブクラス
Controller -> ViewController
Model -> Model用のクラス
iOSのMVCで感じた違和感
iOSにはViewControllerというクラスが存在します。
初めて見た時は「ViewとControllerどっちも持ってるの!?MVCじゃなくね!?」
なんて思ってしまいました。
ViewControllerって何?
以下のサイトで議論されていました!
https://qixil.jp/q/823
どうもViewControllerはControllerっぽいです。
でも名前的にViewControllerでModelの制御させるのは違和感ありまくりですね
Modelの制御はModelControllerみたいなもの作って実装したほうがなんかスッキリしそうです。
Vagrant+ChefでDjangoをインストール
VagrantとChefを使ってDjangoをインストールします。
opscodeで公開されているPythonのcookbookを使ってインストールが可能です。
https://github.com/poise/python
こちらのcookbookではPythonと一緒にpipやvirtualenvもインストールしてくれます。
Djangoのインストールは自作のcookbookからpython::pip経由でインストールを行います。
1.site-cookbooksにDjangoをインストールするcookbookを作成
ここではcustomというcookbookを作成します。
cd site-cookbooks berks cookbook custom
2. default.rbの編集
作成したcustom cookbookのrecipes/default.rbを編集します。
include_recipe "python::pip" python_pip django do version "1.6.1" action :install end
3.Berksfile, Vagrantfileでpython,custom cookbookを指定する
python cookbookはサードパーティ性のcookbookをインストールする手順と同様です。
custom cookbookはBerksfileで path: 'site-cookbooks/customs' としていしてあげてください。
Berksfile
cookbook 'python' cookbook 'customs', '~> 0.1.0', path: 'site-cookbooks/customs'
Vagrantfile
... config.vm.provision :chef_solo do |chef| chef.add_recipe "python" chef.add_recipe "custom" chef.json = { "python" => { "instal_method" => "source", "version" => "2.7.3", }, ... } end ...