異なるチュートリアルは、工場設計パターンによって異なることを意味するように見えます。あなたのリンクにあるものは両方とも単純な工場だと私は言います。私はこの投稿が単純に違いを説明していると思います:Simple Factory vs. Factory Method vs. Abstract Factory 単純なファクトリは、静的メソッドを使用して、通常、ある種のif/elseまたはスイッチ構造を使って異なるサブクラスを作成することによって識別できます。 2番目のリンクの例では実際に静的メソッドを使用していませんが、静的メソッドをあまり変更することなく簡単に静的にすることができます。四本のギャングで
は、ファクトリメソッドパターンは次のように定義されます
オブジェクトを作成するためのインターフェイスを定義しますが、サブクラスがインスタンス化するクラスを を決めましょう。 Factoryメソッドでは、クラスがサブクラスに使用する インスタンス化を延期することができます。
サブクラスを使用するため、静的メソッドはオーバーライドできないため、ここでは機能しません。このようにしたシェイプの例は、次のようになります。
public interface ShapeFactory {
Shape getShape();
}
public class CircleFactory implements ShapeFactory {
public Shape getShape() {
return new Circle();
}
}
public class RectangleFactory implements ShapeFactory {
public Shape getShape() {
return new Rectangle();
}
}
ShapeFactory shapeFactory = new CircleFactory();
...
Shape shape = shapeFactory.getShape();
ここでは、工場の作成と使用方法を分けることができます。ファクトリはあるクラスで作成してから別のクラスに渡すことができるため、クラスは別のクラスによって構成されて異なるタイプのオブジェクトを作成できます。
やJava 8で、私たちは使用することができます。
Supplier<Shape> shapeFactory = Circle::new;
...
Shape shape = shapeFactory.get();
出典
2016-05-08 09:30:51
fgb
私にとって、この説明は最高でした。 http://stackoverflow.com/questions/13029261/design-patterns-factory-vs-factory -method-vs-abstract-factory –
ファクトリは、オブジェクトの作成を目的としたクラスであり、1つまたは複数のファクトリメソッドを持つことができますが、ファクトリメソッドはファクトリクラス専用ではありません。ファクトリメソッドではないオブジェクトにファクトリメソッドを配置する主な理由は、このオブジェクトには作成プロセスを簡素化するいくつかの知識があるからです。たとえば、 'twoMinutes = oneMinute.plusMinutes(1);' – plalx