时间限制:1.000S 空间限制:256MB
题目描述
小明家新开了一家自行车工厂,用于使用自行车配件(车架 frame 和车轮 tires )进行组装定制不同的自行车,包括山地车和公路车。
山地车使用的是Aluminum Frame(铝制车架)和 Knobby Tires(可抓地轮胎),公路车使用的是 Carbon Frame (碳车架)和 Slim Tries。
现在它收到了一笔订单,要求定制一批自行车,请你使用【建造者模式】告诉小明这笔订单需要使用那些自行车配置吧。
输入描述
输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示订单的数量。
接下来的 N 行,每行输入一个字符串,字符串表示客户的自行车需求。
字符串可以包含关键词 "mountain" 或 "road",表示客户需要山地自行车或公路自行车。
输出描述
对于每笔订单,输出该订单定制的自行车配置。
输入示例
3
mountain
road
mountain
输出示例
Aluminum Frame Knobby Tires
Carbon Frame Slim Tires
Aluminum Frame Knobby Tires
提示信息
在本例中:产品为自行车,可以有两个建造者:山地车建造者和公路车建造者。
package builder;
import java.util.Scanner;
// 自行车产品
class Bike {
private String frame;
private String tires;
public void setFrame(String frame) {
this.frame = frame;
}
public void setTires(String tires) {
this.tires = tires;
}
@Override
public String toString() {
return frame + " " + tires;
}
}
// 自行车建造者接口
interface BikeBuilder {
void buildFrame();
void buildTires();
Bike getResult();
}
// 山地自行车建造者
class MountainBikeBuilder implements BikeBuilder {
private Bike bike;
public MountainBikeBuilder() {
this.bike = new Bike();
}
@Override
public void buildFrame() {
bike.setFrame("Aluminum Frame");
}
@Override
public void buildTires() {
bike.setTires("Knobby Tires");
}
@Override
public Bike getResult() {
return bike;
}
}
// 公路自行车建造者
class RoadBikeBuilder implements BikeBuilder {
private Bike bike;
public RoadBikeBuilder() {
this.bike = new Bike();
}
@Override
public void buildFrame() {
bike.setFrame("Carbon Frame");
}
@Override
public void buildTires() {
bike.setTires("Slim Tires");
}
@Override
public Bike getResult() {
return bike;
}
}
// 自行车Director,负责构建自行车
class BikeDirector {
public Bike construct(BikeBuilder bikeBuilder) {
bikeBuilder.buildFrame();
bikeBuilder.buildTires();
return bikeBuilder.getResult();
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 产品数量
int N = sc.nextInt();
sc.nextLine();
// 指导者: 调用方法构建产品,负责控制流程
BikeDirector director = new BikeDirector();
for (int i = 0; i < N; i++) {
String bikeType = sc.nextLine();
BikeBuilder builder;
// 根据输入类别,创建不同类型的具体建造者
if (bikeType.equals("mountain")) {
builder = new MountainBikeBuilder();
} else {
builder = new RoadBikeBuilder();
}
// Director负责指导生产产品
Bike bike = director.construct(builder);
System.out.println(bike);
}
}
}