シンプルなファクトリパターン
1.シンプルなファクトリモデル
単純なファクトリモデルは、クラスを定義することによって他のクラスのインスタンス化を作成する責任がある作成モデルに属します。作成されたインスタンスには通常、共通の親クラスまたはインターフェイスがあります。
2、構造図
- ファクトリ:単純なファクトリパターンのコアであるファクトリクラスは、インスタンスの作成を実装する責任があります。ファクトリクラスでProductを作成するメソッドは、外部から直接呼び出すことができます。
- IProduct:すべてのインスタンスに共通の共通インターフェースの記述を担当する抽象製品クラス。
- 製品:特定の製品カテゴリは、単純なファクトリモデルの目標です。
3、コードのデモンストレーション
果物の例を通して、最初に抽象的な果物のインターフェースが必要です
package 简单工厂模式;
public interface Fruit {
// 生产水果
public void get();
}
次に、特定のフルーツクラス(例:appleとPear)を作成し、フルーツインターフェイスを継承させる必要があります。
public class Pear implements Fruit{
public void get() {
// TODO Auto-generated method stub
System.out.println("生产梨子!");
}
}
public class Apple implements Fruit {
@Override
public void get() {
// TODO Auto-generated method stub
System.out.println("生产苹果!");
}
}
次に、パラメータを渡すことで果物を生産する果物工場を作成する必要があります
package 简单工厂模式;
public class FruitFactory {
// 第一种 :简单
// public static Fruit getApple() {
// return new Apple();
//
// }
// public static Fruit getPear() {
// return new Pear();
//
// }
// 第二种方式:通用
public static Fruit getFruit(String type) {
// 返回水果对象
if("apple".equals(type)) {
return new Apple();
}else if("Pear".equals(type)) {
return new Pear();
}else {
return null;
}
}
}
次に、エンティティクラスを作成して呼び出します。
package 简单工厂模式;
//测试类
public class Text {
public static void main(String[] args) {
/** 第三种方式 简单工厂模式
*
* 直接通过工厂去调用实例化对象,
* 不需要考虑如何后端是如何实现
*/
// 简单型
// Fruit apple = FruitFactory.getApple();
// apple.get();
// Fruit pear = FruitFactory.getApple();
// apple.get();
// 通用型
Fruit apple = FruitFactory.getFruit("apple");
apple.get();
Fruit pear = FruitFactory.getFruit("Pear");
pear.get();
}
}
第四に、単純なファクトリモデルの長所と短所
このパターンでは、ファクトリクラスがパターン全体の鍵となります。これには、必要な論理的判断が含まれています。これにより、外部から提供された情報に基づいて、どの特定のクラスオブジェクトを作成するかを決定できます。ユーザーは、ファクトリクラスを使用するときに、これらのクラスオブジェクトがどのように作成され、どのように編成されているかを理解していなくても、ファクトリクラスに基づいて必要なインスタンスを直接作成できます。ソフトウェアアーキテクチャ全体の最適化に役立ちます。
単純なファクトリパターンの欠点がファクトリクラスにも反映されていることを見つけるのは難しくありません。ファクトリクラスはすべてのインスタンスの作成ロジックを集中させるため、== "高凝集度" ==は得意ではありません。さらに、システム内の特定の製品カテゴリが増え続けると、それに応じて工場カテゴリを変更する必要があるように見える場合があります。スケーラビリティがあまり良くない