ソフトウェア開発プロセスでは、非常に複雑なオブジェクトを作成する必要がある場合があります。オブジェクトは通常、特定の手順に従って複数のサブコンポーネントで構成されます。
たとえば、コンピューターを自分で組み立てる場合、CPU、マザーボード、メモリ、ハードディスク、グラフィックス カード、シャーシ、モニター、キーボード、マウス、その他のコンポーネントから組み立てる必要があります。たとえば、学校が 100 台のコンピュータを購入する必要がある場合、学校が部品を購入して自分で組み立てることは不可能であり、必要な構成を購入者に伝え、購入者がコンピュータ会社に買いに行く必要があります。企業が組み立てて購入者に引き渡し、最終的に学校に引き渡します。
上記の例からわかるように、各コンポーネントは柔軟に選択できます (さまざまなコンピューター構成のレベルを含む) が、作成手順は似ています。ただし、このタイプの製品の作成は、先に紹介したファクトリー パターンでは説明できず、ビルダー パターンのみがこのタイプの製品の作成を適切に説明できます。
ビルダー パターンの定義:
複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。このような設計パターンはビルダー パターンと呼ばれます。複雑なオブジェクトを複数の単純なオブジェクトに分割し、それを段階的に構築します。これは、変更と不変性を区別します。つまり、製品のコンポーネントは変更されませんが、各部分は柔軟に選択できます。
一文でまとめる: 複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにする
タイプ: クラス パターンを作成する
利点:
優れたカプセル化、構築とプレゼンテーションの分離
拡張性の向上、特定の各ビルダーは互いに独立しているため、システムの分離に役立ちます
/** * 产品类 */ public class Car { //车的建造过程 private String wheel; //车轮 private String skeleton; //车架 private String engine; //发动机 public String getWheel() { return wheel; } public void setWheel(String wheel) { this.wheel = wheel; } public String getSkeleton() { return skeleton; } public void setSkeleton(String skeleton) { this.skeleton = skeleton; } public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } }
/** * 指导者 */ //汽车总监 public class CarDirector { public Car constructCar(ICarBuilder builder){ builder.buildwheel(); builder.buildSkeleton(); builder.buildEngine(); return builder.buildCar(); } }
/** * 具体建造者:生产具体的东西 */ public class ConcreteBuilder implements ICarBuilder{ Car car; public ConcreteBuilder(){ car = new Car(); } @Override public void buildwheel() { car.setWheel("轮子"); } @Override public void buildSkeleton() { car.setSkeleton("车身结构"); } @Override public void buildEngine() { car.setEngine("发动机"); } @Override public Car buildCar() { return this.car; } }
/** * 抽象建造者 */ public interface ICarBuilder { public void buildwheel(); //构建车轮 public void buildSkeleton(); //构建骨架 public void buildEngine(); //构建发动机 Car buildCar(); }
public class Test { public static void main(String[] args){ //新建一个总监(替你去买汽车) CarDirector director = new CarDirector(); Car car = director.constructCar(new ConcreteBuilder()); System.out.println(car.getWheel()); System.out.println(car.getEngine()); System.out.println(car.getSkeleton()); } }
ビルダーモードは構築プロセスの順序によって異なり、最終的なオブジェクトコンポーネントの構成も異なります
以上がJava デザイン パターンのビルダー パターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。