1.定義
複合オブジェクトが作成され、使用して、彼の分離を示し、同じ作成プロセスを異なる表現(クラス属性の異なるインスタンス)を作成することができます。
2、UML 图
図3に示すように、組成物
- 製品カテゴリ(製品):一般的に、より複雑なカテゴリが、つまり、より複雑なプロセスのクラスインスタンスを作成します
- 抽象クラスの作成者(IProductBuilder) :抽象インタフェース・クラスの作成者、このインタフェースを実装できるクラスを作成するために、異なる製品のオブジェクトを作成する手順を定義して、独自の実現を設計します
- クリエーター(ProductABuilder、ProductBBuilder) :オブジェクトの特定のインスタンスを作成する責任は、クラスを作成するプロセスをカプセル化します。そこには、一般的に製品を作成し、作成されたオブジェクトを返すために2つの段階、すなわち段階に分類されています
- ディレクターのカテゴリ(監督):製品を作成するために、適切な作成者を呼び出すための責任一般的に、直接、インタラクティブ、製品カテゴリの作成者と直接対話しません
図4に示すように、コード
// 复杂的对象,产品类
public class Product {
private List<String> parts = new ArrayList<>();
// 需要添加多个组件才能创建产品
public void addPart(String part) {
this.parts.add(part);
}
public void show() {
System.out.println("本产品所有组件有:" + parts.toString());
}
}
// 抽象创建者
public interface IProductBuilder {
// 创建步骤
void buildPart1();
void buildPart2();
// 获得创建好的产品
Product getProduct();
}
// A产品的创建者
public class ProductABuilder implements IProductBuilder {
private Product product = new Product();
// 创建A产品的步骤1
@Override
public void buildPart1() {
product.addPart("产品A-部件1");
}
// 创建A产品的步骤2
@Override
public void buildPart2() {
product.addPart("产品A-部件2");
}
@Override
public Product getProduct() {
return product;
}
}
// B产品的创建者
public class ProductBBuilder implements IProductBuilder {
private Product product = new Product();
// 创建产品B的步骤1
@Override
public void buildPart1() {
product.addPart("产品B-部件1");
}
// 创建产品B的步骤2
@Override
public void buildPart2() {
product.addPart("产品B-部件2");
}
@Override
public Product getProduct() {
return product;
}
}
// 导演类,负责调用创建者生成对象
public class Director {
public Product getProduct(IProductBuilder builder){
builder.buildPart1();
builder.buildPart2();
return builder.getProduct();
}
}
// 调用者
public class Main {
public static void main(String[] args) {
Director director = new Director();
Product productA = director.getProduct(new ProductABuilder());
Product productB = director.getProduct(new ProductBBuilder());
productA.show();
productB.show();
}
}
結果:
本产品所有组件有:[产品A-部件1, 产品A-部件2]
本产品所有组件有:[产品B-部件1, 产品B-部件2]
5、利点
- パッケージが良いです。パッケージを作成するプロセスは、呼び出し側は、複雑なオブジェクトの作成プロセスを心配する必要はありません。
- 良いを拡大。新製品は、唯一の既存のコードを変更せずに、製品の作成者を追加する必要がある場合
6、及びファクトリーモードの間の差
見つけることができ、作成者モードと工場出荷時のパターンは非常に似て、オブジェクトのインスタンスを作成するために使用され、その差はモード作成者よりもあるディレクターのカテゴリ。
工場出荷時のパターンと比較すると、作成者モードでは、主に作成するために使用され、より複雑なオブジェクトを。必要が別のクラスを分離するように作成されたオブジェクトは、より複雑であるため、そのクラスのディレクターが作成され、このプロセスに関与すると、およびファクトリクラスは、直接オブジェクトを作成します。
7、アプリケーションのシナリオ
主に、より複雑なオブジェクトの一部を作成するために使用され、内部にそれらのオブジェクトのビルド順序は、一般的に安定しているが、オブジェクトのコンストラクタのパラメータ/属性が異なることになります。あなたがオブジェクトを作成するのであれば、工場出荷時のパターンを使用して、より複雑であり、オブジェクトは、作成者モードを使用するように特別な責任を作成する場合。