[程序员的自我修养-做一个牛逼的程序员,就得从设计模式入手]-建造者模式

建造者模式是一种创造型的模式,它关注的是具有相同属性的多个复杂对象的创建问题。同时,能够细粒度的把控该对象的部件赋值操作和创建顺序等。比如,麦当劳的套餐可以是汉堡加可乐,也可以是鸡块加果汁(套餐是一个对象,饮料和主食就是两个部件)。服务员可以先打好可乐,再做汉堡,也可以反过来。最后,到顾客手里的就是一份完整的套餐了。

 

以下,以代码说明。

 

//不管饮料还是主食,都有名称和价格。

public class Meal {
    private String staple;
    private String drink;

    public Meal() {};

    public void setStaple(String staple) {
        this. staple = staple;
    }  
    public String getStaple() {
        return this.staple;
    }
    public void setDrink(String drink) {
        this.drink = drink;
    }
    public String getDrink() {
    return this.drink;
    }
    
}

接下来,就是一个抽象的套餐创造者的角色了。它包含了Meal中的每个属性的操作接口。

public interface AbstractMealBuilder {
    // 选取主食
    void buildStaple();
    // 选取饮料
    void buildDrink();
    // 取回套餐内容
    Meal retrieveMeal();
}

每一个实际的套餐建造者可以继承上面的抽象类,返回具体的内容。

public class BurgerBuilder implements AbstractMealBuilder {
    private Meal meal = new Meal();
    @override
    public void buildStaple() {meal.setStaple = "burger";}

    @override
    public void buildDrink() {meal.setDrink = "coke";}

    @override
    public Meal retrieveMeal() {return meal;}
}


public class NutgetBuilder implements AbstractMealBuilder {
    
    private Meal meal = new Meal();
    @override
    public void buildStaple() {meal.setStaple = "nutget";}

    @override
    public void buildDrink() {meal.setDrink = "juice";}

    @override
    public Meal retrieveMeal() {return meal;}
}

实际建造者已经有了,但是这个制造过程需要一个导演来指挥过程。

public class Director{
    
    private AbstractMealbuilder builder; 

    //构造方法将 builder传入

    public Director(AbstractMealbuilder builder) { this.builder = builder;}

    
    //装配套餐的流程
    public void assembly() {
    builder.buildStaple();

    builder.buildDrink();    
}

    
} 

最后,用户在点某个套餐时的情景。

public class customer {
    public static void main (String[] args) {
    
   AbstractMealBuilder builder = new BurgerBuilder();
   Director director = new Director(builder);

    director.assembly();

    builder.retrieveMeal();
}

}

以上。就是一个最基本的创建者模式的demo了。

当写完这一段代码之时,我也理解到了这个模式的几个关键点。

使用设计模式是为了让我们的代码更易懂,更高效。在用创造者模式之前,先要考虑的是这个对象是不是很复杂,可以拆分吗?如果以后业务场景再添加新的对象,我怎么提取公共部分?考虑好这两个点后写代码,毕竟,一个接口的方法一有风吹草动,实现了它的类可是要跟着改动的。全局观对于一个程序员来说就很重要了。

 

在示例代码里,大家看到了,其实这个模式有三个重要的角色:能够复用的对象(object)、建造者(抽象和实际)、领导者。先由对象指定公有的属性是什么。抽象建造者指定对象的每个属性的赋值方法,实际建造者完成具体赋值操作。由领导者具体控制制造的流程。这个领导者就是对外的一个入口了,不需知道具体的实现细节,只要指定需要的建造者即可,后台自动装配完成。

 

设计模式是死的,看了别人的大道理,不是真的能理解了。不如自己假设一种场景,把自己的理解写出来,让大家和你一起探讨。

 

实践、自省、开放、真诚。做一个有所作为的程序员。

你可能感兴趣的:(个人笔记)