お久しぶりです。白々です。
先日エンジニアの先輩にデザインパターンをご存知でない!?という冷静なツッコミを頂き、その後結城浩さんが書かれた「Java言語で学ぶデザインパターン入門」を渡されたので勉強することにしました。
ただ、本を一読しても覚えられないので覚書として記事にしようと思いました。
今回で6回目です。
完走できるように頑張ります。
また、「Java言語で学ぶデザインパターン入門」には、サンプルプログラムも有りますが、著作権の都合上省かせて頂きます。御了承ください。
前回は、「Singletonパターン」に関しての記事を作成しました。
前回の記事は、以下です。
https://qiita.com/sirajirasajiki/items/532d33fd823e52ab0d1a
今回は、「Prototypeパターン」に関して記載したいと思います。
また、「Java言語で学ぶデザインパターン入門」には、サンプルプログラムも有りますが、著作権の都合上省かせて頂きます。御了承ください。
#第6章 Prototypeパターン-コピーしてインスタンスを作る
「Java言語で学ぶデザインパターン入門」には、
インスタンスから別のインスタンスを作り出す「Prototypeパターン」
という記述がありました。
このPrototypeパターンは、既存のインスタンスを複製して新しいインスタンスを作ります。
###Prototypeパターンの使い所
このパターンを使うときは、以下のような時に使います。
- オブジェクトの種類が多すぎる
- クラスから新しくインスタンスを生成するのが難しい場合
- フレームワークと生成するインスタンスを分けたい場合
2は、インスタンスを生成が難しい場合というのは、ユーザーがペイントアプリなどで作成した絵のインスタンスや、ユーザーがモデリングツールなどで作成したモデルのインスタンスなど、クラスから新しくインスタンスを生成できない時を示します。
##Prototypeパターンを使う時の注意事項
- インスタンスの複製を行うクラスのソースには、クラスの名前を書かない
- 理由: インスタンスの複製クラスと名前が書かれたクラスに密接な関係ができてしまうから
##Prototypeを使った例
今回は、「Java言語で学ぶデザインパターン入門」で記載されていた、文字列を文字で囲んだり、文字列を特定の文字で下線を書いて表示する物を考えます。
文字を文字で囲むクラスと文字列を特定の文字で下線を書くクラスをManagerというクラスで管理する物とします。
このクラス図は、PlantUMLというもので記載しています。
私が、書いたPlantUMLのコードは以下のGitHubに記載がありますのでReadMeを読んでお使いください。
singleton.txtです。
https://github.com/sirajirasajiki/design_pattern_uml/tree/master/prototype
PlantUMLのインストール方法と使い方に関しては、後述のappendixに記載しています。
###クラス図を元にPythonで実装
以下に実装したコードを公開しています。Python 3.7で実装しました。
https://github.com/sirajirasajiki/design_pattern_python/tree/master/Prototype
#まとめ
既存のインスタンスから別のインスタンスを作成するPrototypeパターンについて学びました。
#第6章感想
個人的には、Prototypeパターンは、複雑な計算をいくつかのパターンでする時とかに使ったりするのかなと思いました。
例えば、数値計算をするクラスがあったとして、そのクラスを継承したインスタンスXがあるとします。
インスタンスXが持っている値をAの場合とBの場合の両方で計算したい時に、2回計算させるのは面倒なのでコピーした方が楽なので、この考え方は便利だと思いました。
後日良さそうな例を作って、Pythonで実装しようと思います。
例が思いつかなかったので、本に記載されている例を使ってPythonで作成しました。
#最後に
何か間違っているところがあれば、ご指摘していただけると嬉しいです!
#appendix