设计模式 -建造者模式

造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
主要有4个对象
1 Builder (抽象建造者 => 工人模范)
2 ConcreateBuilder (具体的建造者 => 招到的工人)
3 Director (具体指挥者 => 监督的总管)
4 Product (需要的产品)
举个例子
比如我要做牛肉汉堡红烧肉炒饭
1、 我要先建立一个工人模范 来规范我可能招到的厨师
2、 我要将这两个食物所需要的工序写出来
3、 招很多工人,要开始动工这两道菜
4、 再挖一个总工来监督工序
5、 直接在总工那里得到产品的实例

直接上代码
Builder => 工人需要会做的事情
Product => 产品需要的制作工序
Builder_1 => 招到的第一类工人
Builder_2 => 招到的第二类工人
Director => 挖到了总工
Main => 通过叫总工指挥工人来获得产品

public class t09_pro {
    public static void main(String[] args) {
        Director director = new Director();
        Product product_1 = director.create(new Builder_1());
        Product product_2 = director.create(new Builder_2());
        var p1 = product_1.toString();
        var p2 = product_2.toString();
        System.out.println(p1+"\n"+p2);
    }
}
interface Builder{
    void buildPart_1();
    void buildPart_2();
    void buildPart_3();
    Product getProduct();
}
class Product{
    private String part1;
    private String part2;
    private String part3;
    private String name;
    public String getPart1() {
        return part1;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public String getPart2() {
        return part2;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }

    public String getPart3() {
        return part3;
    }

    public void setPart3(String part3) {
        this.part3 = part3;
    }
    @Override
    public String toString(){
        return part1+"\n"+part2+"\n"+part3+"\n"+this.name+"已经做好";
    }
}
class Builder_1 implements Builder{
    private Product product;
    public Builder_1(){
        this.product = new Product();
        this.product.setName("牛肉汉堡");
    }

    @Override
    public void buildPart_1() {
        this.product.setPart1("面包");
    }

    @Override
    public void buildPart_2() {
        this.product.setPart2("牛肉");
    }

    @Override
    public void buildPart_3() {
        this.product.setPart3("沙拉酱");
    }

    @Override
    public Product getProduct() {
        return this.product;
    }
}
class Builder_2 implements Builder{
    private Product product;
    public Builder_2(){
        this.product = new Product();
        this.product.setName("红烧肉炒饭");
    }
    @Override
    public void buildPart_1() {
        this.product.setPart1("米饭");
    }

    @Override
    public void buildPart_2() {
        this.product.setPart2("红烧肉");
    }

    @Override
    public void buildPart_3() {
        this.product.setPart3("酱汁");
    }
    @Override
    public Product getProduct() {
        return this.product;
    }
}
class Director{
    public Product create(Builder builder){
        builder.buildPart_1();
        builder.buildPart_2();
        builder.buildPart_3();
        return builder.getProduct();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43635647/article/details/105002875