Help us understand the problem. What is going on with this article?

デザインパターン×PHP - Factory Method

More than 5 years have passed since last update.

はじめに

増補改訂版Java言語で学ぶデザインパターン入門を利用して、デザインパターンを学習していこうと思います。
その備忘録として、徒然にQiitaに投稿していきます。

Factory Methodパターンの構成要素

役名 概要
Product オブジェクト生成メソッド(工場)で生成されるオブジェクトが持つインタフェースを定義するクラス
Creator オブジェクト生成メソッド(Product型のオブジェクトを返す)を提供するクラス
ConcreteProduct Productクラスで定義されたインタフェースを実装するクラス(具体的な肉付けをする側)
ConcreteCreator ConcreteProductクラスのインスタンスを返すクラス具体的な肉付けをする側)

Factory Methodパターンのクラス図

Factory Methodパターンのクラス図

Factoryという命名の由来

  • 「クラスのインスタンス」を製造するという工場のような振る舞いをするため

Factory Methodパターンのメリット

  • 同様の機能を備えたインスタンスを工場で製造できる

ー 工場側は、生成しているインスタンスが実際どのような実装になっているかは知ることができないが、Factory Methodを利用することで同じ機能を備えたインスタンスを製造することが可能に。

  • オブジェクトの生成処理と使用処理を分離できる

ー 生成の責務をCreatorとConcreteCreatorに割り当て、使用側をクライアント側のコードに割り当てることが可能に。このことで、保守がやりやすくなる。

  • オブジェクトの利用側とオブジェクトのクラスの間の結びつきを緩くできる

ー Factory Methodパターンでは、オブジェクトをnew演算子を利用せずに、インスタンス生成メソッドで呼び出している。(上図のfacrotyMethod()にあたる)
オブジェクトの利用者側が「new クラス名」と直接記述しなくてよいので、利用側とオブジェクトの間の結びつきを緩くなることによって、保守がしやすい設計となる。
このnew演算子を使わない方法は、Virtual Constructor(仮想的なコンストラクタ)と呼ばれる。

Factory Methodパターンのデメリット

  • 適切に利用しないと設計が複雑になりすぎてしまう
    ー Factory Methodパターンは、1つのクラスを追っただけでは、全体の動作が把握できないので、計画的に用いないと複雑な設計に陥ることになる。

参考記事

この記事では、条件分岐が多くなって保守がやりづらくなってしまったソースを、Factory Methodパターンを用いて、すっきりリファクタリングしています。ぜひご参照ください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away