モデル名と分類
工場
意図
サブクラスは技術をインスタンス化するクラスを決定させ、定義されたオブジェクトのインタフェースを作成します。そのサブクラスを遅らせるために、クラスをインスタンス化するために、工場の製造方法。
注1:ファクトリメソッドはそのサブクラスを遅らせるために、クラスをインスタンス化することです。これは、ファクトリインタフェースの実装クラスを指します。
注2:ファクトリメソッドパターンだけで最適化モデル工場は、多くの場合、工業地帯や工場を区別するための簡単な方法になりがちません。それとも分け:工場出荷時のモデル-モデルのファクトリメソッド、簡単な工場モード-工場モデル。
エイリアス
FactoryMethod
モチベーション
:シンプルなファクトリパターンを参照https://www.cnblogs.com/dhcao/p/11151858.html
この単純なモデルで最適化された植物を:
- 植物の使用でシンプルで便利以上のものですが、設計で、より多くの行にあるとしながら開閉設計原理:新にオープン、修正のため閉鎖しました。
- シンプルなプラントでは、我々は、工場のif-elseまたは他のケースに応じて選択、またはルーティング何インスタンス作成されますが、製品の新しいインスタンスならば、ルートを追加することが必要であるが、工場で決定され、そのモード言葉遣い開閉の原則に反します。
構造
参加者
- あなたは製品モジュールを作成する必要がある - 形状、円、正方形、長方形を
- 工場モジュール - ShapeFactory、CircleFactory、SquareFactory、RectangleFactory
- クライアントを呼び出します(図ショーには示されていません)
連携
比較シンプル工場パターンがメモリことがわかります。
- 各製品は、排他的な製品を作成し、各プラントを作成するための独自の工場を持っています。
- これは植物の特定の使用、クライアントによって決定されます。
コード例
//步骤 1
//创建一个接口:
//Shape.java
public interface Shape {
void draw();
}
//步骤 2
//创建实现接口的实体类。
//Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
//Square.java
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
//Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
//步骤 3
//创建一个工厂接口
//ShapeFactory.java
public class ShapeFactory {
//使用 getShape 方法获取形状类型的对象
public Shape getShape();
}
// 创建具体的工厂类
//CircleFactory.java
public class CircleFactory implements ShapeFactory{
//使用 getShape 方法获取形状类型的对象
public Shape getShape(){
return new Circle();
}
}
//SquareFactory.java
public class SquareFactory implements ShapeFactory{
//使用 getShape 方法获取形状类型的对象
public Shape getShape(){
return new SquareFactory();
}
}
//RectangleFactory.java
public class RectangleFactory implements ShapeFactory{
//使用 getShape 方法获取形状类型的对象
public Shape getShape(){
return new RectangleFactory();
}
}
// 步骤 4
// 客户端使用工厂。
//FactoryPatternDemo.java
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//通过Circle工厂获取 Circle 的对象,并调用它的 draw 方法
ShapeFactory cFactory = new CircleFactory();
Shape circle = cFactory.getShape();
//调用 Circle 的 draw 方法
circle.draw();
//通过Square工厂获取 Square 的对象,并调用它的 draw 方法
ShapeFactory sFactory = new SquareFactory();
Shape square = sFactory.getShape();
//调用 Square 的 draw 方法
square.draw();
}
}
関連パターン
シンプルなファクトリパターン、工場出荷時のパターン、Abstract Factoryパターン