设计模式(5)--反向理解建造者模式

来源:互联网 发布:万网域名后台 编辑:程序博客网 时间:2024/06/07 03:15

什么是建造者模式?
建造者模式是一种创建行为模式,为了是创建对象而存在的设计模式,当对象是由多个简单对象组合而成,且对象组合不断变化的时候,这个对象的创建可以考虑使用建造者模式。

什么时候使用?
对象由多个简单对象组合而成,且对象的组合不断变化的时候。 例如汉堡、可乐可以看做成简单的对象,套餐是我们要创建的对象,套餐包含的对象的种类是不断变化的,套餐的创建就适合使用建造者模式。

有什么缺点?
1,建造者模式构建对象中的简单对象必须有公共的特点(继承自同一接口),使用范围有限。
2,内部逻辑复杂,增加了代码的层级

建造者实现:
以网上的餐厅套餐组合为例,一个套餐由汉堡和饮料组合而成。
首先要实现这个需求,我们要有个套餐类,这个类可以准备不同套餐,这个类也是实现建造者的关键。

public class MealBulider {    public Meal prepareVegMeal(){        Meal meal = new Meal();        meal.addItem(“一种汉堡”);        meal.addItem(“一种可乐”);        return meal;    }    public Meal prepareChickMeal(){        Meal meal = new Meal();        meal.addItem(“另一种汉堡”);        meal.addItem(“另一种可乐”);        return meal;    }}

这个类就是我们说的创建者,这个准备套餐就很容易了,不断的向Item中加产品(简单对象)就可以了, 然后想想如何创建Meal这个类呢? meal中必包含一个产品的List,用于保存汉堡,可乐等等信息,有一个添加产品的方法。

public class Meal {    private List<Item> foodList = new ArrayList<>();    public void addItem(Item item){        foodList.add(item);    }}

然后如果汉堡和可乐都能作为一个对象添加到Item中,那么很容易知道,这两个类必须都继承同一个Item接口。【建造者缺点之一】

interface Item(){}
一种汉堡  implements Item(){}
另外一种汉堡  implements Item(){}
一种可乐  implements Item(){}
另外一种可乐  implements Item(){}

以上,我们就完成了一个简单的建造者模式。

public class Client {    public static void main(String[] args){        MealBulider bulider = new MealBulider();        Meal meal  = bulider.prepareChickMeal();        Meal meal1 = bulider.prepareVegMeal();    }}

这样 meal中就有了我们需要的组合,当然 我们可以根据需求对简单对象层进行拆分,提取和优化。

现在,如果有第三种套餐,两份可乐的怎么做呢?很简单,在MealBulider中添加一个方法就可以获取这个套餐对象了。

原创粉丝点击