设计模式-汉堡套餐组合-建造者模式

建造者模式的使用场景

  1. 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。

  2. 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可 以使用该模式。

  3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建 造者模式非常合适。

  其实到了这里我们大体的了解到了我们建造者模式的两个核心点就是一个是固定的组件(对象),还有就是可以灵活的进行顺序组装我们的组件,满足客户端Client的需要。

建造者模式的含义

  建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:

  Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)

场景案例

  我们要实现的案例是编写一个套餐类,套餐中的组件为汉堡、可乐、薯条,我们要实现能够灵活的创建各种套餐,例如汉堡+薯条、汉堡+可乐、汉堡+薯条+可乐等。下图为应用到设计的建造者模式的类图:

img

代码实现

img

FoodPackage.java

@Data
public class FoodPackage {

    /**
     * 炸薯条
     */
    private String fries;

    /**
     * 可乐
     */
    private String cola;

    /**
     * 汉堡
     */
    private String hamburg;

    public FoodPackage(FoodBuilder foodBuilder) {
        this.fries = foodBuilder.fries;
        this.cola = foodBuilder.cola;
        this.hamburg = foodBuilder.hamburg;
    }

    public static class FoodBuilder {
        /**
         * 炸薯条
         */
        private String fries;

        /**
         * 可乐
         */
        private String cola;

        /**
         * 汉堡必选
         */
        private String hamburg;

        public FoodBuilder(String hamburg) {
            this.hamburg = hamburg;
        }

        public FoodBuilder setCola(String cola) {
            this.cola = cola;
            return this;
        }

        public FoodBuilder setFries(String fries) {
            this.fries = fries;
            return this;
        }

        public FoodPackage build() {
            return new FoodPackage(this);
        }
    }
}

Client.java

public class Client {
    public static void main(String[] args) {
        // 套餐1 牛肉汉堡+可乐
        new FoodPackage.FoodBuilder("牛肉汉堡").setCola("可乐").build();
        // 套餐2 牛肉汉堡+薯条
        new FoodPackage.FoodBuilder("牛肉汉堡").setCola("可乐").build();
        // 套餐3 牛肉汉堡+可乐+薯条
        new FoodPackage.FoodBuilder("牛肉汉堡").setCola("可乐").setFries("薯条").build();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值