ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

初探设计模式:建造者模式

2021-12-31 16:33:09  阅读:171  来源: 互联网

标签:product void 建造 Product public 初探 设计模式 ProductBuilder builder


建造者模式与装饰器模式区别:

装饰器模式是针对相同的处理方案,添加额外装饰
建造者模式是针对固有的多种处理方式,选择性组合起来达成不同的结果

建造者模式的关键,是将复杂对象的构建过程与它本身的表示分离,使得同样的构建过程可以创建不同的表示

以饭店商品出单为例:

1. 先定义一个商品类
public class Product {

    /**
     * 套餐内容
     */
    private ArrayList<String> parts = new ArrayList<String>();

    public void add(String part) {
        parts.add(part);
    }

    public void show() {
        System.out.println(parts);
    }
}
2. 使用抽象类定义出店家可供选择的商品
public abstract class ProductBuilder {

    /**
     * 米饭
     */
    public abstract void rice();

    /**
     * 面条
     */
    public abstract void noodle();

    /**
     * 饮料
     */
    public abstract void drink();

    /**
     * 汤
     */
    public abstract void soup();

    /**
     * 获取结果
     * @return
     */
    public abstract Product build();
}
3. 商品的具体实现(后厨)
public class ProductBuilderConcrete extends ProductBuilder {

    private Product product = new Product();

    /**
     * 米饭
     */
    @Override
    public void rice() {
        product.add("米饭");
    }

    /**
     * 面条
     */
    @Override
    public void noodle() {
        product.add("面条");
    }

    /**
     * 饮料
     */
    @Override
    public void drink() {
        product.add("饮料");
    }

    /**
     * 汤
     */
    @Override
    public void soup() {
        product.add("汤");
    }

    /**
     * 获取结果
     *
     * @return
     */
    @Override
    public Product build() {
        return product;
    }
}
4. 商品选择搭配(套餐选择)
public class ProductDirectorOne {
    private ProductBuilder builder;

    public ProductDirectorOne(ProductBuilder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.drink();
        builder.noodle();
    }
}
public class ProductDirectorTwo {
    private ProductBuilder builder;

    public ProductDirectorTwo(ProductBuilder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.rice();
        builder.soup();
    }
}
5. 客户端下单
public class BuilderModeClient {

    public static void main(String[] args) {
        // 顾客一的搭配
        customerOne();
        // 顾客二的搭配
        customerTwo();
    }

    private static void customerOne() {
        // 取出菜单
        ProductBuilder builder = new ProductBuilderConcrete();
        // 选择套餐
        ProductDirectorOne one = new ProductDirectorOne(builder);
        one.construct();
        // 交给后厨,准备上菜
        Product product = builder.build();
        product.show();
    }

    private static void customerTwo() {
        // 取出菜单
        ProductBuilder builder = new ProductBuilderConcrete();
        // 选择套餐
        ProductDirectorTwo two = new ProductDirectorTwo(builder);
        two.construct();
        // 交给后厨,准备上菜
        Product product = builder.build();
        product.show();
    }
}

标签:product,void,建造,Product,public,初探,设计模式,ProductBuilder,builder
来源: https://www.cnblogs.com/aaabc/p/15753610.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有