java设计模式(四)——建造者模式

1、基本概念

建造者模式适用于一步一步创建复杂对象的过程。

复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的方式却相对稳定

 

2、类图和角色

角色:

抽象建造者(指挥者)

具体建造者

具体产品

3、案例

例如:去肯德基店去点餐,有不同的套餐产生不同的订单

案例:

类图:

 

 抽象建造者IorderBulider :

public interface IorderBulider {

    void addHamburger(String name);

    void addCoke(String name);

    void addChicken(String name);

    void addFruitjuice(String name);

    Order buildOrder();

}

具体的建造者OrderBuilder :

public class OrderBuilder implements IorderBulider {

    Order order = new Order();

    @Override
    public void addHamburger(String name) {
        order.setHamburger(name);
    }

    @Override
    public void addCoke(String name) {
        order.setCoke(name);
    }

    @Override
    public void addChicken(String name) {
        order.setChicken(name);
    }

    @Override
    public void addFruitjuice(String name) {
        order.setFruitjuice(name);
    }

    @Override
    public Order buildOrder(){
        return order;
    }
}

具体产品Order :

@Data
public class Order {

    private String hamburger;
    private String coke;
    private String chicken;
    private String fruitjuice;

}

测试:

public class Test {
    public static void main(String[] args) {
        IorderBulider iorderBulider = new OrderBuilder();
        iorderBulider.addChicken("韩式炸鸡");
        iorderBulider.addCoke("百事可乐");
        iorderBulider.addHamburger("德式汉堡");
        Order order = iorderBulider.buildOrder();
        System.out.println(order);
    }
}

 

链式写法:

public class OrderBuilder implements IorderBulider {

    Order order = new Order();

    @Override
    public IorderBulider addHamburger(String name) {
        order.setHamburger(name);
        return this;
    }

    @Override
    public IorderBulider addCoke(String name) {
        order.setCoke(name);
        return this;
    }

    @Override
    public IorderBulider addChicken(String name) {
        order.setChicken(name);
        return this;
    }

    @Override
    public IorderBulider addFruitjuice(String name) {
        order.setFruitjuice(name);
        return this;
    }

    @Override
    public Order buildOrder(){
        return order;
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        IorderBulider iorderBulider = new OrderBuilder();
        iorderBulider.addChicken("韩式炸鸡")
                     .addCoke("百事可乐")
                     .addHamburger("德式汉堡")
                     .addFruitjuice("汇源果汁");
        Order order = iorderBulider.buildOrder();
        System.out.println(order);
    }
}

 

posted @ 2020-07-08 19:57  来一杯可乐  阅读(177)  评论(0编辑  收藏  举报