推奨される初心者チュートリアル: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.