建造者模式
这里包括指挥者Director、产品Product、抽象建造者Builder、具体建造者Concrete Builder
举一个具体的例子
仍然是买汽车的例子:首先制造汽车有一些共性(Bulider)
package com.company.Builder;
/**
* @author 珝珞
* @date 2020/3/11
* @project name redrock1
*/
public abstract class AbstractBuilder {
//车车颜色
public abstract void brush();
//车车大小
public abstract void measure();
//返回做好的车车
public abstract Car getCar();
}
然后我说要买什么什么型号、颜色的🚗,车店老板(Director)就告诉具体建造者(Concrete Builder)
public class Director {
public void Do(AbstractBuilder abstractBuilder){
abstractBuilder.brush();
abstractBuilder.measure();
}
}
然后具体的怎么造一部汽车(Concrete Builder)
package com.company.Builder;
/**
* @author 珝珞
* @date 2020/3/11
* @project name redrock1
*/
public class ConcreteBuilder extends AbstractBuilder{
Car car = new Car();
@Override
public void brush() {
car.Add("刷红色");
}
@Override
public void measure() {
car.Add("做5米大的车车");
}
@Override
public Car getCar() {
return car;
}
}
然后🚗🚗好了(Product)
package com.company.Builder;
import java.util.ArrayList;
import java.util.List;
/**
* @author 珝珞
* @date 2020/3/11
* @project name redrock1
*/
public class Car {
private List<String> parts = new ArrayList<>();
public void Add(String part){
parts.add(part);
}
public void show(){
for (int i = 0;i < parts.size();i++){
System.out.println(parts.get(i)+"好了");
}
}
}
我就来验收了
package com.company.Builder;
/**
* @author 珝珞
* @date 2020/3/11
* @project name redrock1
*/
public class Customer {
public static void main(String[] args) {
Director director = new Director();
AbstractBuilder abstractBuilder = new ConcreteBuilder();
director.Do(abstractBuilder);
Car car = abstractBuilder.getCar();
car.show();
}
}