建造者模式
来源:互联网 发布:人工智能 传统制造业 编辑:程序博客网 时间:2024/06/14 01:40
建造者模式
public interface Item {String name();float price();Packing packing();}在此基础上分类食物为饮料喝汉堡分别创建他们的抽象类
public abstract class Burger implements Item{//汉堡抽象类@Overridepublic Packing packing() {return new Wrapper();}}
public abstract class ColdDrink implements Item{//饮料抽象类@Overridepublic Packing packing() {// TODO Auto-generated method stubreturn new Bottle();}}
上面出现了两个未知类Wrapper喝Bottle,它们分别代表了不同的包装方式,为了使用它们组合复杂的对象,它们也需要在任何地方能用父类指向子类对象。抽象
public interface Packing {String pack();}分别实现不同的包装Wrapper和Bottle
public class Bottle implements Packing{@Overridepublic String pack() {// TODO Auto-generated method stubreturn "Bottle";}}
public class Wrapper implements Packing{
@Override
public String pack() {
// TODO Auto-generated method stub
return "Wrapper";
}
}
public class ChickenBurger extends Burger{
@Override
public String name() {
// TODO Auto-generated method stub
return"Chicken Burger";
}
@Override
publicfloat price() {
// TODO Auto-generated method stub
return 25.6f;
}
}
public class VegBurger extends Burger{
@Override
public String name() {
// TODO Auto-generated method stub
return "VegBurger";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 15.3f;
}
}
public class Coke extends ColdDrink{
@Override
public String name() {
// TODO Auto-generated method stub
return "coke";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 3f;
}
}
public class Orange extends ColdDrink{
@Override
public String name() {
// TODO Auto-generated method stub
return "Oragne";
}
@Override
public float price() {
// TODO Auto-generated method stub
return 4.5f;
}
}
现在具体的食物类已经创建完毕,那么就需要放他们的容器(套餐类)
public class Meal {
private List<Item>items = new ArrayList<Item>();
publicvoid addItem(Item item){
items.add(item);
}
publicfloat getCost(){
floattotalCost = 0;
for(Itemitem : items){
totalCost+=item.price();
}
returntotalCost;
}
publicvoid showItems(){
for (Itemitem : items) {
System.out.print("Name:"+item.name()+"\t");
System.out.print("Packing:"+item.packing().pack()+"\t");
System.out.println("Price:"+item.price());
}
}
}
接下来那么就需要构造套餐了,需要构造器
public class MealBuilder1 {
Meal meal =new Meal();
public Meal create(){
returnmeal;
}
public MealBuilder1 addBurger(Burgerburger){
meal.addItem(burger);
returnthis;
}
public MealBuilder1 addColdDrink(ColdDrinkcoldDrink){
meal.addItem(coldDrink);
returnthis;
}
}
public static void main(String[] args){
MealBuilder1 builder1 = new MealBuilder1();
Meal vegMeal =builder1.addBurger(new VegBurger()).addColdDrink(new Orange()).create();
vegMeal.showItems();
System.out.println("Totlal Price:"+vegMeal.getCost());
MealBuilder1 builder2 = new MealBuilder1();
Meal chickenMeal =builder2.addBurger(new ChickenBurger()).addColdDrink(new Coke()).create();
chickenMeal.showItems();
System.out.println("Total Price:"+chickenMeal.getCost());
}
UML图就不上传了,有兴趣可以去菜鸟教程看看
- Builder 建造者模式
- 建造者模式
- 设计模式-------建造者
- 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式
- 建造者模式 - builder
- 建造者模式
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式
- java建造者模式
- 建造者模式
- 建造者模式
- 建造者模式(Builder)
- 建造者模式
- --读书不觉春已深--何去何从
- Java菜鸟学习日记28
- java项目中antlr-2.7.6.jar和ant.jar的作用
- 创建DLL详解(3)
- Java菜鸟学习日记29
- 建造者模式
- Java菜鸟学习日记30
- Java8 Optional剖析
- 线程2:线程的生命周期与控制
- Linux中ps命令介绍
- 打包后的JavaAgent修复线程无法被执行
- 升级Android Studio2.3 遇到的坑
- Android-Bitmap压缩总结
- windows安装MongoDB 以及与pyhthon的交互