複雑なオブジェクトは、多くの場合、特定のステップで複数のサブコンポーネントで構成されます。たとえば、車はエンジン、タイヤ、ステアリングホイールなどのコンポーネントで構成されています。
オブジェクトを構成するさまざまなパーツを柔軟に選択でき、作成手順も同様です。ビルダーモデルを使用して、そのような製品の作成を説明できます。
ビルダーモードとは何ですか?
「「複雑なオブジェクトの構築をその表現から分離して、同じ構築プロセスで異なる表現を作成できるようにします(複雑なオブジェクトの構築をその表現から分離して、同じ構築プロセスで異なる表現を作成できるようにします)。
」
ビルダーモードでは、複雑なオブジェクトが複数の単純なオブジェクトに分解され、製品のコンポーネントは変更されませんが、各単純なオブジェクトの内部は柔軟で変更可能です。
ビルダーモードの長所と短所については説明しません。次に、ビルダーモードの構造を理解しましょう。
ビルダーモードは、主に製品、抽象ビルダー、コンクリートビルダー、コマンダーの4つの要素で構成されています。これらの4つの要素の説明は次のとおりです。
「「」
製品の役割(製品):複数のコンポーネントを含む複雑なオブジェクトであり、各コンポーネントは特定のビルダーによって作成されます。
抽象ビルダー(ビルダー):これは、製品のさまざまなサブコンポーネントを作成するための抽象メソッドを含むインターフェースであり、通常、複雑な製品を返すためのメソッドを含みます
getResult()
。具体的なビルダー:ビルダーインターフェイスを実装し、複雑な製品の各コンポーネントの具体的な作成方法を完了します。
ディレクター:ビルダーオブジェクトのコンポーネント構築メソッドとアセンブリメソッドを呼び出して、複雑なオブジェクトの作成を完了します。ディレクターには、特定の製品情報は含まれません。
これらの要素間の関係は次のとおりです。
ビルダーモード
コード
製品カテゴリProduct
@Data
public class Product {
private String partA;
private String partB;
private String partC;
public void show(){
String partA = getPartA();
String partB = getPartB();
String partC = getPartC();
System.out.println("这可能是东半球最好的产品...");
Console.log("组成结构:{},{},{}",partA,partB,partC);
}
}
Product
このクラスには、3つのコンポーネントフィールドとdisplayメソッドが含まれていますshow()
。
ビルダー抽象クラスBuilder
public abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getResult() {
return product;
}
}
抽象クラスにBuilder
は、3つの抽象メソッドとProduct
オブジェクトを取得するためのメソッドが含まれています。
司令官Director
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct(){
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
Director
クラスDirector
にはBuilder
オブジェクトを渡すためのコンストラクターが含まれており、construct()
メソッドは主にビルドされたクラスのメソッドを呼び出してProduct
オブジェクトを返します。
ConcreteBuilder
抽象ビルダーを継承し、内部にメソッドを実装します。
public class ConcreteBuilder extends Builder {
@Override
public void buildPartA() {
product.setPartA("建造 PartA");
}
@Override
public void buildPartB() {
product.setPartB("建造 PartB");
}
@Override
public void buildPartC() {
product.setPartC("建造 PartC");
}
}
クラスを呼び出すClient
public class Client {
public static void main(String[] args){
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product construct = director.construct();
construct.show();
}
}
試験結果:
这可能是东半球最好的产品...
组成结构:建造 PartA,建造 PartB,建造 PartC
知っておくべきコードがあります:
「「まず、ビルダーが作成されます。ビルダーには、製品属性に値を割り当てるためのさまざまな機能があります
次に、コマンダーが作成され、コマンダーはビルダー関数を呼び出して製品を取得します
」
構築モードから、製品は直接作成されるのではなく、ビルダーに命令する司令官によって作成されることがわかります。これはファクトリモードと非常に似ていますが、ビルダーモードはファクトリモードよりも複雑であることに注意してください。
作成する必要のある製品の作成プロセスが複雑な場合、共通の作成プロセスを抽出し、特定の実装クラスに渡して作成プロセスをカスタマイズできるため、同じ作成動作で異なる製品を作成し、作成と表示を分離して、製品を作成できます。柔軟性が大幅に向上します。
ビルダーモデルについて考える
では、ビルダーモードの利点は何ですか?
工場モデルと同様に、クライアントは製品の内部構成の詳細を知らなくても製品を入手できます。ビルダーとビルダーは互いに独立しています。システムの拡張に役立ちます。特定のビルダーを変更しても、他のモジュールには影響しません。
では、いつビルダーモードを使用するのですか?Zen of DesignPatternsは次のように書いています。
「「●ビルダーモードは、同じメソッド、異なる実行シーケンス、および異なるイベント結果が生成される場合に使用できます。
●複数のコンポーネントまたはパーツを1つのオブジェクトに組み立てることができますが、生成される実行結果は同じではないため、このモードを使用できます。
●製品カテゴリが非常に複雑であるか、製品カテゴリの呼び出しシーケンスによって異なるパフォーマンスが生成されます。現時点では、ビルダーモードを使用するのが非常に適しています。
●オブジェクト作成の過程で、システム内の他のオブジェクトが使用されます。製品オブジェクトの作成中にこれらのオブジェクトを簡単に利用できない場合は、ビルダーモードを使用してオブジェクトの作成プロセスをカプセル化することもできます。このようなシーンは、オブジェクトの入手が容易ではなく、デザイン段階では気付かれないため、補正方法にすぎませんが、クリエーターモードで作成プロセスを和らげるために、デザイン自体に違反しています。
過去に推奨
QRコードをスキャンして、よりエキサイティングになります。または、WeChatでLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます
1.回复"java" 获取java电子书;
2.回复"python"获取python电子书;
3.回复"算法"获取算法电子书;
4.回复"大数据"获取大数据电子书;
5.回复"spring"获取SpringBoot的学习视频。
6.回复"面试"获取一线大厂面试资料
7.回复"进阶之路"获取Java进阶之路的思维导图
8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)
9.回复"总结"获取Java后端面试经验总结PDF版
10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)
11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)
もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。