ビルダーパターン(ビルダー)----デザインパターン

ビルダーパターン(ビルダー)----デザインパターン

各車の入手方法は?

前回のハイエンジニア以来、ハイエンジニアは自動車製造計画のプロトタイプ設計モードを提供してきました。ファクトリーモードを使用して、自動車工場がさまざまなタイプの自動車を製造できるようにするだけでなく、ユーザーのニーズ。同じ車自動車工場は急速に成長しました…

しかし、車の生産の過程で、車の所有者は車の生産の過程に干渉することを望ま、彼は車(製品)だけを望んでいます。そこで彼は再びシニアエンジニアに電話しました。シニアエンジニアはしばらく考えて、下請け業者(ディレクター)を雇って、すべての自動車製造の一般的なプロセスを設計することができると彼に言いました(ビルダー) 、あなただけが責任を負います車両の特定の情報を契約チームに提供すると(ConcreteBuilderはBuilderに準拠している必要があります) 、契約チームが特定の車両を製造します。車両の製造の詳細や製造プロセスについて心配する必要はありません。

上司はGaoGaoのエンジニアに最初にパイロットテストを行わせることに決めたので、GaoGaoのエンジニアはノンストップで始めました...

各車を構造的に作り始めます

上級エンジニアの具体的な考えを説明する

ここに画像の説明を挿入

自動車製造における分業

上司が望んでいる車両------>製品

自動車の製造を担当する職長------>ディレクター

すべての車両のおおよその製造プロセス------>ビルダー

各車両生産の特定のプロセス------>ConcreteBuilder

ここに画像の説明を挿入

上級エンジニアによって実装されたプロセス

上司が望んでいる車両------>製品クラス

つまり、Carタイプのオブジェクトです。

package com.design_patterns.builder.instance;

/**
 * 等待生产的产品角色
 * 具有方向盘、轮胎、发动机等属性以及setter和getter方法
 */
public class Car {
    
    
    private String steeringWheel;
    private String wheel;
    private String engine;

    public String getSteeringWheel() {
    
    
        return steeringWheel;
    }

    public void setSteeringWheel(String steeringWheel) {
    
    
        this.steeringWheel = steeringWheel;
    }

    public String getWheel() {
    
    
        return wheel;
    }

    public void setWheel(String wheel) {
    
    
        this.wheel = wheel;
    }

    public String getEngine() {
    
    
        return engine;
    }

    public void setEngine(String engine) {
    
    
        this.engine = engine;
    }

    @Override
    public String toString() {
    
    
        return "Car{" +
                "steeringWheel='" + steeringWheel + '\'' +
                ", wheel='" + wheel + '\'' +
                ", engine='" + engine + '\'' +
                '}';
    }
}

自動車の製造を担当する職長------>ディレクター

つまり、CarDirector

package com.design_patterns.builder.instance;

/**
 * 定义包工头类,即Director指挥者,根据具体传入的制作流程
 * 进行汽车生产并返回
 */
public class CarDirector {
    
    
    private CarBuilder carBuilder = null;

    public CarDirector(CarBuilder carBuilder) {
    
    
        this.carBuilder = carBuilder;
    }

    public CarBuilder getCarBuilder() {
    
    
        return carBuilder;
    }

    public void setCarBuilder(CarBuilder carBuilder) {
    
    
        this.carBuilder = carBuilder;
    }

    /**
     * 指挥者指挥建造车子的具体流程,最后返回一个车子实例
     * @return
     */
    public Car constructCar(){
    
    
        this.carBuilder.buildSteeringWheel();
        this.carBuilder.buildWheel();
        this.carBuilder.buildEngine();
        return this.carBuilder.buildCar();
    }
}

すべての車両のおおよその製造プロセス------>ビルダー

つまり、CarBuilderクラス

package com.design_patterns.builder.instance;

/**
 * 定义抽象建造者角色,抽象汽车的制作过程
 */
public abstract class CarBuilder {
    
    
    protected Car car = new Car();

    public abstract void buildSteeringWheel();
    public abstract void buildWheel();
    public abstract void buildEngine();

    public Car buildCar(){
    
    
        return car;
    }
}

各車両生産の特定のプロセス------>ConcreteBuilder

つまり、BenzCarBuilder、BmwCarBuildクラス

package com.design_patterns.builder.instance;

/**
 * 定义奔驰车的详细制作流程
 */
public class BenzCarBuild extends CarBuilder {
    
    
    @Override
    public void buildSteeringWheel() {
    
    
        car.setSteeringWheel("奔驰车方向盘制造成功!");
    }

    @Override
    public void buildWheel() {
    
    
        car.setWheel("奔驰车轮胎制造成功!");
    }

    @Override
    public void buildEngine() {
    
    
        car.setEngine("奔驰车发动机制造成功!");
    }
}
package com.design_patterns.builder.instance;

/**
 * 定义宝马车的具体制作流程
 */
public class BmwCarBuild extends CarBuilder {
    
    
    @Override
    public void buildSteeringWheel() {
    
    
        car.setSteeringWheel("宝马车方向盘制造成功!");
    }

    @Override
    public void buildWheel() {
    
    
        car.setWheel("宝马车轮胎制造成功!");
    }

    @Override
    public void buildEngine() {
    
    
        car.setEngine("宝马车发动机制造成功!");
    }
}

最後は----->高レベルのエンジニアのテストです

package com.design_patterns.builder.instance;

/**
 * 定义老板测试类,根据不同的车型生产信息返回不同的车型信息。
 */
public class Client {
    
    
    public static void main(String[] args) {
    
    
        BenzCarBuild benzCarBuild = new BenzCarBuild();         //实例化奔驰车生产流程
        BmwCarBuild bmwCarBuild = new BmwCarBuild();                //实例化宝马车生产流程

        CarDirector carDirector = new CarDirector(benzCarBuild);          //实例化汽车生产包工头,传递的是奔驰车生产流程实例
        Car car = carDirector.constructCar();                           //生产奔驰车
        carDirector.setCarBuilder(bmwCarBuild);                             //将包工头的生产信息改变为宝马车
        Car car1 = carDirector.constructCar();                          //生产宝马车

        System.out.println("奔驰车生产成功---->" + car);               //输出奔驰车信息
        System.out.println("宝马车生产成功---->" + car1);              //输出宝马车信息
    }

}

試験結果

奔驰车生产成功---->Car{
    
    steeringWheel='奔驰车方向盘制造成功!', wheel='奔驰车轮胎制造成功!', engine='奔驰车发动机制造成功!'}
宝马车生产成功---->Car{
    
    steeringWheel='宝马车方向盘制造成功!', wheel='宝马车轮胎制造成功!', engine='宝马车发动机制造成功!'}

まとめ(魂を求める人のために)

これまでのところ、テストは終了しています。実際、このビルダーモードを理解するのは少し難しいです。実際、ビルダーモードの本質は、製品自体製品作成プロセスから切り離し、同じことを実現することです。作成プロセスは、青写真に従ってさまざまな製品オブジェクトを作成できます。まったく新しい製品を作成しますさて、これを書いてみましょう。この記事がうまく書かれていると思われる場合は、親指を立ててください。あなたの研究が成功することを願っています。

エンジニアのガオガオは再び工場の構造改革を手伝い、工場長から称賛されました。彼が静かに荷物を整理し、ランドセルを背負って夕日に向かって歩いているのを見ました...

おすすめ

転載: blog.csdn.net/weixin_43479947/article/details/107473529