建造者模式基础

在某赛车游戏中,赛车包括方程式赛车、场地越野赛车、运动汽车、卡车等类型,不同类型的赛车的车身、发动机、轮胎、变速箱等部件有所区别。玩家可以自行选择赛车类型,系统将根据玩家的选择创建出一辆完整的赛车。现采用建造者模式实现赛车的构建

类图:

 

代码实现:

Builder:
 

package com.coin.builder;

import com.coin.product.car;

public abstract class Builder {
    car car=new car();
    public abstract void createEngine();
    public abstract void createBody();
    public abstract void createTries();
    public abstract void createTransmission();
    public abstract car getCar();
}

offroadCarBuilder:

package com.coin.builder;
import com.coin.product.car;

public class offRoadCarBuilder extends Builder{
    @Override
    public void createEngine() {
        car.setEngine("越野车发动机");
    }

    @Override
    public void createBody() {
        car.setBody("越野车车身");
    }

    @Override
    public void createTries() {
        car.setTires("越野车轮胎");
    }

    @Override
    public void createTransmission() {
        car.setTransmission("越野车变速箱");
    }

    @Override
    public car getCar() {
        System.out.println("组装成功————越野车");
        return car;
    }
}

racingCarBuilder:

package com.coin.builder;
import com.coin.product.car;
public class racingCarBuilder extends Builder{
    @Override
    public void createEngine() {
        car.setEngine("赛车发动机");
    }

    @Override
    public void createBody() {
        car.setBody("赛车车身");
    }

    @Override
    public void createTries() {
        car.setTires("赛车轮胎");
    }

    @Override
    public void createTransmission() {
        car.setTransmission("赛车变速箱");
    }

    @Override
    public car getCar() {
        System.out.println("组装成功————赛车");
        return car;
    }
}

sportsCarBuilder:
 

package com.coin.builder;
import com.coin.product.car;
public class sportsCarBuilder extends Builder{
    @Override
    public void createEngine() {
        car.setEngine("运动汽车发动机");
    }

    @Override
    public void createBody() {
        car.setBody("运动汽车车身");
    }

    @Override
    public void createTries() {
        car.setTires("运动汽车轮胎");
    }

    @Override
    public void createTransmission() {
        car.setTransmission("运动汽车变速箱");
    }

    @Override
    public car getCar() {
        System.out.println("组装成功————运动汽车");
        return car;
    }
}

product:
 

package com.coin.product;

public class car {
    private String engine;//发动机
    private String body;//车身
    private String tires;//轮胎
    private String transmission;//变速箱

    public String getEngine() {
        return engine;
    }

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

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getTires() {
        return tires;
    }

    public void setTires(String tires) {
        this.tires = tires;
    }

    public String getTransmission() {
        return transmission;
    }

    public void setTransmission(String transmission) {
        this.transmission = transmission;
    }

    @Override
    public String toString() {
        return "car{" +
                "engine='" + engine + '\'' +
                ", body='" + body + '\'' +
                ", tires='" + tires + '\'' +
                ", transmission='" + transmission + '\'' +
                '}';
    }
}

director:
 

package com.coin;

import com.coin.builder.Builder;
import com.coin.product.car;

public class Director {
    private Builder builder;

    public Director(Builder builder){
        this.builder=builder;
    }
    public car construct(){
        builder.createBody();
        builder.createEngine();
        builder.createTransmission();
        builder.createTries();
        car car=builder.getCar();
        return car;
    }
}

测试:
 

package com.coin;

import com.coin.builder.offRoadCarBuilder;
import com.coin.builder.racingCarBuilder;
import com.coin.builder.sportsCarBuilder;

public class Test {
    public static void main(String[] args) {
        Director director=new Director(new racingCarBuilder());
        System.out.println(director.construct());
        System.out.println("——————————————————————————————");
        Director director1=new Director(new offRoadCarBuilder());
        System.out.println(director1.construct());
        System.out.println("——————————————————————————————");
        Director director2=new Director(new sportsCarBuilder());
        System.out.println(director2.construct());
    }
}

运行结果:

新人一个首次学习,如有不足,多多指教。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值