建造者模式
模式说明
结构
代码演示
package com.yukiyama.pattern.creation;
import java.util.ArrayList;
import java.util.List;
/**
* 建造者模式(生成器模式)
*/
public class BuilderDemo {
public static void main(String[] args) {
// 声明一个指挥者
Director director = new Director();
// 声明一个具体建造者
CarMaker carMaker = new F1CarMaker();
// 指挥者执行produce方法,传入具体建造者执行建造
director.produce(carMaker);
// 通过建造者的get方法得到建造后的产品
Car car = carMaker.getCar();
// 产品调用show方法展示建造后的产品细节
car.show();
}
}
/**
* 指挥者类
* 提供一个指挥生产的方法produce,传入具体建造者,执行既定的建造产品的方法
* 完成产品制造。
*/
class Director{
public void produce(CarMaker cm) {
cm.buildWheels();
cm.buildEngine();
cm.buildSeats();
}
}
/**
* 抽象建造者类
* 提供建造产品各部件的抽象方法和一个返回产品的方法。
* 下例为一个抽象汽车制造者类。
*/
abstract class CarMaker{
public abstract void buildWheels();
public abstract void buildEngine();
public abstract void buildSeats();
public abstract Car getCar();
}
/**
* 具体建造者类
* 继承抽象建造者类,并持有一个产品实例,实现产品各部分抽象建造方法和返回
* 产品的抽象方法(返回其持有的产品实例)。
* 下例是F1赛车制造者
*/
class F1CarMaker extends CarMaker{
private Car car = new Car();
@Override
public void buildWheels() {
car.add("赛车轮胎");
}
@Override
public void buildEngine() {
car.add("赛车引擎");
}
@Override
public void buildSeats() {
car.add("赛车座椅");
}
@Override
public Car getCar() {
return car;
}
}
/**
* 具体建造者类
* 按照该建造者的实际情况实现产品各部分建造方法和返回产品方法
* 下例是家用车制造者
*/
class HomeCarMaker extends CarMaker{
private Car car = new Car();
@Override
public void buildWheels() {
car.add("家用车轮胎");
}
@Override
public void buildEngine() {
car.add("家用车引擎");
}
@Override
public void buildSeats() {
car.add("家用车座椅");
}
@Override
public Car getCar() {
return car;
}
}
/**
* 要建造的产品类
* 持有产品各部件的集合List<String>,定义一个add方法用于添加构件。另定义
* 一个show方法用于展示建造的产品细节。
*/
class Car{
private List<String> parts = new ArrayList<>();
public void add(String part) {
parts.add(part);
}
public void show() {
System.out.println(parts);
}
}Last updated