初心者チュートリアルデザインパターン学習〜

推奨される初心者チュートリアル:https//www.runoob.com/design-pattern/design-pattern-intro.html

工場モード

ファクトリパターンを使用すると、オブジェクトを自分で作成しなくても、オブジェクトを作成するときに共通のインターフェイスを介して新しいオブジェクトを取得できます。
利点
1呼び出し元は製品名でのみオブジェクトを取得できます
。2製品を追加する場合は、工場で対応する製品クラスを追加するだけで済みます
。3呼び出し元は対応する製品(クラスのインスタンス)を取得できますのみ。関数を呼び出すことにより、
欠点
たびに製品を追加する場合は、あなたがクラスを追加して、オブジェクトの実現工場を変更する必要があります。製品の数が多い場合には、管理がより複雑になる。1すべての
工場出荷時のモードカプセル化、要するに呼び出し元が特定の製品に注意を払う必要がないように、特定の製品を1回実現します。作成時間の詳細、オブジェクトを作成するためのコードがより複雑な場合はファクトリパターンを使用できますが、オブジェクトの作成は、新規でのみ完了できます。次に、ファクトリパターンを使用する必要があるかどうかを検討する必要があります。
コードプラクティス:
クラス組織図:ここに画像の説明を挿入

図の形状は、さまざまな製品のいくつかの基本的なパブリック属性を表します。
円、正方形、および長方形は特定の製品を表します
。ShapeFactoryは、必要な製品を入手するための工場を表します。
FactoryPatternDemoは、デモのメイン関数の入り口です。
自分のコードの継承と呼び出しの構造は、上の図に示すとおりです。自分の理解に基づいて、コードの特定の部分の名前を少し変更しました。

形状(製品の基本的な特徴)

public interface Shape {
    
    
   void draw();
}

特定の製品-長方形、正方形、円

public class Rectangle implements Shape {
    
    
 
   @Override
   public void draw() {
    
    
      System.out.println("Inside Rectangle::draw() method.");
   }
}
public class Square implements Shape {
    
    
 
   @Override
   public void draw() {
    
    
      System.out.println("Inside Square::draw() method.");
   }
}
public class Circle implements Shape {
    
    
 
   @Override
   public void draw() {
    
    
      System.out.println("Inside Circle::draw() method.");
   }
}

製品が製造される工場

public class Factory {
    
    
    public Shape getShape(String shapeType) {
    
    
        if (shapeType == null) {
    
    
            return null;
        }
        // 比较的时候忽略大小写
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
    
    
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
    
    
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("SQUARE")) {
    
    
            return new Square();
        } else {
    
    
            return null;
        }
    }
}

発信者は、インターフェイスを介して対応する製品を直接取得します

public class FactoryDemoMain {
    
    
    public static void main(String[] args) {
    
    
        Factory shapeFactory = new Factory();
        //通过工厂去获取 Circle 的对象,并调用它的 draw 方法
        Shape product1 = shapeFactory.getShape("CIRCLE");
        //调用 Circle 的 draw 方法
        product1.draw();
    }
}

出力:

Inside Circle::draw() method.

おすすめ

転載: blog.csdn.net/liu_12345_liu/article/details/103443078