2016年10月28日みなさんは「工場」と言われたときに何の工場を想像するでしょうか?車に、缶詰、飲み物などいろいろな工場があります。今回紹介するFactoryMethodパターンは、「オブジェクトを生成する方法」に一工夫を加えるデザインパターンです。言ってもなかなかうまく伝わりませんね。実際に行っている操作に比べて言葉にすると難しいように感じられますが、FactoryMethodパターンを使うことで「パッケージに依存しないプログラミング」が可能となります。言葉で概要を説明するよりも先に実装を確認してもらった方が分かりやすいかもしれません。ここでのサンプルプログラムは「車」オブジェクトを作る工場を考えてみましょう。product);}FactoryクラスではTemplateパターンを使って作成しています。createメソッドでは、製品を作り(createProduct)、その製品を登録し(registerProduct)し、出荷(return)します。製造方法や、登録の方法などはFactoryクラスのサブクラスに委任しています。製品はどんな形であれ使用する(use)することができる。製品はどんな形であれ使用する(use)することができる。use();}Factoryクラスで作成される製品はどんな形であれ使用することができるはずです。運転すると考えてもいいでしょうか。owners;}}Factoryクラス(工場のテンプレート)を継承し、車の製造”工場”を作りました。メーカー)を登録します。CarFactoryクラスはパッケージが異なることに注意してください。owner;}}Product(製品)クラスを継承した、車クラスです。製造された際に、「”メーカー”の車を作成」とコンソールに表示し、実際に使用する(use)する場合に、「”メーカー”の車を走らせる」と表示するだけの簡単なコードです。factory.create("daihatsu");product1.use();product2.use();product3.use();}}FactoryMethodパターンを確認するためだけのサンプルプログラムです。一度動かしてみていただければ、まぁそうなるだろうな。程度の感想かもしれません。ここで重要なのはFactoryクラスはどんな工場なのか全くわからないことです。(com.xoxopigs.carパッケージのインポートもされない。)車であろうが、野菜であろうが、缶ジュースであろうが、Factoryクラスは関知していないのです。これはFactoryMethodパターンを使ってオブジェクトの生成に一工夫し、抽象メソッドとしたことに由来します。まとめうーん、これはあまりうまく伝えられていない気がします。一度サンプルコードを実行すると、「あー、なるほど。実際に打ち込んで動作を確認して、改造してみてください。今回のサンプルコードではFactoryMethodを抽象メソッドとしましたが、その他にも実装されていない場合にエラーが出るように定義する。デフォルトの実装を定義し、オーバーライドで対応する。いった方法も考えられます。うまく伝えられるように色々試してみて何か補足があればまた記事にしますね!スポンサーリンクスポンサーリンクTwitterFacebookGoogle+PocketB!はてブLINE-デザインパターン執筆者:piggy関連記事アルゴリズムを定義してロジックはサブクラスに任せるTemplateパターン今回紹介するTemplateパターンは比較的理解しやすいデザインパターンです。Iteratorパターンデザインパターンの中でももっとも理解がしやすく、また利用価値も高いものでIteratorパターンがあります。Iteratorパターンは数え上げのためのパターンです。Adapterパターン実際の業務で新しいコードを1から書き始めるなんてことは滅多にありません。基本は既にあるコードを追加・修正しバージョンアップを重ねるという業務がほとんどですね。...インスタンスが1つしか作られないように制限するSingleton(シングルトン)パターンもっとも頻繁に使われるデザインパターンといえば、Singletonパターンでしょう。このSingletonパターンには、「インスタンスが1つしか作られないことを保証する」という意味が含まれます。