JAVA开发常用模式_Java开发中常用的设计模式(三)---建造者模式

一. 模式结构

建造者模式主要包含四个角色:

Product:产品角色。

Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。

ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。

Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

二. 模式实现

KFC里面一般都有好几种可供客户选择的套餐,它可以根据客户所点的套餐,然后在后面做这些套餐,返回给客户的事一个完整的、美好的套餐。下面我们将会模拟这个过程,我们约定套餐主要包含汉堡、薯条、可乐、鸡腿等等组成部分,使用不同的组成部分就可以构建出不同的套餐。

1. Meal.java  套餐类,Product角色

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classMeal {privateString food;privateString drink;publicString getFood() {returnfood;

}public voidsetFood(String food) {this.food =food;

}publicString getDrink() {returndrink;

}public voidsetDrink(String drink) {this.drink =drink;

}

}

View Code

2. MealBuilder.java  套餐构造器,Builder角色

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public abstract classMealBuilder {

Meal meal= newMeal();public abstract voidbuildFood();public abstract voidbuildDrink();publicMeal getMeal(){returnmeal;

}

}

View Code

3. 套餐A、套餐B  实现抽象套餐类,ConcreteBuilder角色

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public class MealA extendsMealBuilder{public voidbuildDrink() {

meal.setDrink("一杯可乐");

}public voidbuildFood() {

meal.setFood("一盒薯条");

}

}public class MealB extendsMealBuilder{public voidbuildDrink() {

meal.setDrink("一杯柠檬果汁");

}public voidbuildFood() {

meal.setFood("三个鸡翅");

}

}

View Code

4. KFC的服务员  它决定了套餐是的实现过程,然后给你一个完美的套餐,Director角色

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classKFCWaiter {privateMealBuilder mealBuilder;public voidsetMealBuilder(MealBuilder mealBuilder) {this.mealBuilder =mealBuilder;

}publicMeal construct(){//准备食物

mealBuilder.buildFood();//准备饮料

mealBuilder.buildDrink();//准备完毕,返回一个完整的套餐给客户

returnmealBuilder.getMeal();

}

}

View Code

三. 测试

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

public classClient {public static voidmain(String[] args) {//服务员

KFCWaiter waiter = newKFCWaiter();//套餐A

MealA a = newMealA();//服务员准备套餐A

waiter.setMealBuilder(a);//获得套餐

Meal mealA =waiter.construct();

System.out.print("套餐A的组成部分:");

System.out.println(mealA.getFood()+"---"+mealA.getDrink());

}

}

View Code

运行结果:套餐A的组成部分:一盒薯条---一杯可乐

四. 模式总结

1. 建造者模式是将一个复杂对象的创建过程给封装起来,客户只需要知道可以利用对象名或者类型就能够得到一个完整的对象实例,而不需要关心对象的具体创建过程。

2. 建造者模式将对象的创建过程与对象本身隔离开了,使得细节依赖于抽象,符合依赖倒置原则。可以使用相同的创建过程来创建不同的产品对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值