建造者模式(装修公司装修套餐)

news/2024/5/6 23:36:19

目录

定义

装修公司装修套餐

物料接⼝

吊顶(ceiling)

⼀级顶

⼆级顶

涂料(coat)

多乐⼠

⽴邦

地板(floor)

德尔

圣象

地砖(tile)

东鹏

⻢可波罗

代码实现

定义装修包接⼝

装修包实现

建造者⽅法

测试验证


定义

建造者模式所完成的内容就是通过将多个简单对象通过⼀步步的组装构建出⼀个复杂对象的过程。

装修公司装修套餐

很多装修公司都会给出⾃家的套餐服务,⼀般有;欧式豪华、轻奢⽥园、现代简约等等,⽽这些套餐的

后⾯是不同的商品的组合。例如;⼀级&⼆级吊顶、多乐⼠涂料、圣象地板、⻢可波罗地砖等等,按照

不同的套餐的价格选取不同的品牌组合,最终再按照装修⾯积给出⼀个整体的报价。

物料接⼝

public interface Matter {String scene(); // 场景;地板、地砖、涂料、吊顶String brand(); // 品牌String model(); // 型号BigDecimal price(); // 价格String desc(); // 描述
}

吊顶(ceiling)

⼀级顶

public class LevelOneCeiling implements Matter {public String scene() {return "吊顶";}public String brand() {return "装修公司⾃带";}public String model() {return "⼀级顶";}public BigDecimal price() {return new BigDecimal(260);}public String desc() {return "造型只做低⼀级,只有⼀个层次的吊顶,⼀般离顶120-150mm";}
}

⼆级顶

public class LevelTwoCeiling implements Matter {public String scene() {return "吊顶";}public String brand() {return "装修公司⾃带";}public String model() {return "⼆级顶";}public BigDecimal price() {return new BigDecimal(850);}public String desc() {return "两个层次的吊顶,⼆级吊顶⾼度⼀般就往下吊20cm,要是层⾼很⾼,也可增加每级的厚度";}
}

涂料(coat)

多乐⼠

public class DuluxCoat implements Matter {public String scene() {return "涂料";}public String brand() {return "多乐⼠(Dulux)";}public String model() {return "第⼆代";}public BigDecimal price() {return new BigDecimal(719);}public String desc() {return "多乐⼠是阿克苏诺⻉尔旗下的著名建筑装饰油漆品牌,产品畅销于全球100个国家,每年全球有5000万户家庭使⽤多乐⼠油漆。";}
}

⽴邦

public class LiBangCoat implements Matter {public String scene() {return "涂料";}public String brand() {return "⽴邦";}public String model() {return "默认级别";}public BigDecimal price() {return new BigDecimal(650);}public String desc() {return "⽴邦始终以开发绿⾊产品、注⾼科技、⾼品质为⽬标,以技术⼒量不断推进科研和开发,满⾜消费者需求。";}
}

地板(floor)

德尔

public class DerFloor implements Matter {public String scene() {return "地板";}public String brand() {return "德尔(Der)";}public String model() {return "A+";}public BigDecimal price() {return new BigDecimal(119);}public String desc() {return "DER德尔集团是全球领先的专业⽊地板制造商,北京2008年奥运会家装和公装地板供应商";}
}

圣象

public class ShengXiangFloor implements Matter {public String scene() {return "地板";}public String brand() {return "圣象";}public String model() {return "⼀级";}public BigDecimal price() {return new BigDecimal(318);}public String desc() {return "圣象地板是中国地板⾏业著名品牌。圣象地板拥有中国驰名商标、中国名牌、国家免检、中国环境标志认证等多项荣誉。";}
}

地砖(tile)

东鹏

public class DongPengTile implements Matter {public String scene() {return "地砖";}public String brand() {return "东鹏瓷砖";}public String model() {return "10001";}public BigDecimal price() {return new BigDecimal(102);}public String desc() {return "东鹏瓷砖以品质铸就品牌,科技推动品牌,⼝碑传播品牌为宗旨,2014年品牌价值132.35亿元,位列建陶⾏业榜⾸。";}}

⻢可波罗

public class MarcoPoloTile implements Matter {public String scene() {return "地砖";}public String brand() {return "⻢可波罗(MARCO POLO)";}public String model() {return "缺省";}public BigDecimal price() {return new BigDecimal(140);}public String desc() {return "“⻢可波罗”品牌诞⽣于1996年,作为国内最早品牌化的建陶品牌,以“⽂化陶瓷”占领市场,享有“仿古砖⾄尊”的美誉。";}
}

代码实现

定义装修包接⼝

public interface IMenu {IMenu appendCeiling(Matter matter); // 吊顶IMenu appendCoat(Matter matter); // 涂料IMenu appendFloor(Matter matter); // 地板IMenu appendTile(Matter matter); // 地砖String getDetail(); // 明细
}

装修包实现

public class DecorationPackageMenu implements IMenu {private List<Matter> list = new ArrayList<Matter>(); // 装修清单private BigDecimal price = BigDecimal.ZERO; // 装修价格private BigDecimal area; // ⾯积private String grade; // 装修等级;豪华欧式、轻奢⽥园、现代简约private DecorationPackageMenu() {}public DecorationPackageMenu(Double area, String grade) {this.area = new BigDecimal(area);this.grade = grade;}public IMenu appendCeiling(Matter matter) {list.add(matter);price = price.add(area.multiply(new BigDecimal("0.2")).multiply(matter.price()));return this;}public IMenu appendCoat(Matter matter) {list.add(matter);price = price.add(area.multiply(new BigDecimal("1.4")).multiply(matter.price()));return this;}public IMenu appendFloor(Matter matter) {list.add(matter);price = price.add(area.multiply(matter.price()));return this;}public IMenu appendTile(Matter matter) {list.add(matter);price = price.add(area.multiply(matter.price()));return this;}public String getDetail() {StringBuilder detail = new StringBuilder("\r\n-------------------------------------------------------\r\n" +"装修清单" + "\r\n" +"套餐等级:" + grade + "\r\n" +"套餐价格:" + price.setScale(2, BigDecimal.ROUND_HALF_UP) + " 元\r\n" +"房屋⾯积:" + area.doubleValue() + " 平⽶\r\n" +"材料清单:\r\n");for (Matter matter: list) {detail.append(matter.scene()).append(":").append(matter.brand()).append("、").append(matter.model()).append("、平⽶价格:").append(matter.price()).append(" 元。\n");}return detail.toString();}}

建造者⽅法

public class Builder {public IMenu levelOne(Double area) {return new DecorationPackageMenu(area, "豪华欧式").appendCeiling(new LevelTwoCeiling()) // 吊顶,⼆级顶.appendCoat(new DuluxCoat()) // 涂料,多乐⼠.appendFloor(new ShengXiangFloor()); // 地板,圣象}public IMenu levelTwo(Double area){return new DecorationPackageMenu(area, "轻奢⽥园").appendCeiling(new LevelTwoCeiling()) // 吊顶,⼆级顶.appendCoat(new LiBangCoat()) // 涂料,⽴邦.appendTile(new MarcoPoloTile()); // 地砖,⻢可波罗}public IMenu levelThree(Double area){return new DecorationPackageMenu(area, "现代简约").appendCeiling(new LevelOneCeiling()) // 吊顶,⼆级顶.appendCoat(new LiBangCoat()) // 涂料,⽴邦.appendTile(new DongPengTile()); // 地砖,东鹏}
}

测试验证

@Test
public void test_Builder(){Builder builder = new Builder();// 豪华欧式System.out.println(builder.levelOne(132.52D).getDetail());// 轻奢⽥园System.out.println(builder.levelTwo(98.25D).getDetail());// 现代简约System.out.println(builder.levelThree(85.43D).getDetail());
}

http://www.mrgr.cn/p/80045331

相关文章

vue3打包js内存溢出

第一步:npm install -g increase-memory-limit第二步:npm install increase-memory-limit —save-dev第三步:package.json文件中修改 "build:win32": "cross-env LIMIT=2048 increase-memory-limit BUILD_TARGET=win32 node .electron-vue/build.js",//添…

Transformer step by step--Positional Embedding 和 Word Embedding

Transformer step by step往期文章&#xff1a; Transformer step by step--层归一化和批量归一化 要把Transformer中的Embedding说清楚&#xff0c;那就要说清楚Positional Embedding和Word Embedding。至于为什么有这两个Embedding&#xff0c;我们不妨看一眼Transformer的…

1小时学会SpringBoot3+Vue3前后端分离开发

首发于Enaium的个人博客 引言 大家可能刚学会Java和Vue之后都会想下一步是什么&#xff1f;那么就先把SpringBoot和Vue结合起来&#xff0c;做一个前后端分离的项目吧。 准备工作 首先你需要懂得Java和Vue的基础知识&#xff0c;环境这里就不多说了&#xff0c;直接开始。 …

C++初阶之入门

零、什么是C C是基于C语言而产生的&#xff0c;它既可以进行C语言的过程化程序设计&#xff0c;又可以进行以抽象数据类型为特点的基于对象的程序设计&#xff0c;还可以进行面向对象的程序设计。 C缺点之一&#xff0c;是相对许多语言复杂&#xff0c;而且难学难精。许多人说学…

实验三——软件测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例;…

amCharts粒状梯度柱形图

代码案例<!DOCTYPE html> <html><head><script src="https://cdn.amcharts.com/lib/5/index.js"></script><script src="https://cdn.amcharts.com/lib/5/xy.js"></script><script src="https://cdn.am…

实验三:单元测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例;…

MQTT 数据包格式简介(V5.0)

MQTT 数据包格式简介(V5.0) 目录MQTT 数据包格式简介(V5.0)前言概览固定头(Fixed Header)可变头(Variable Header)包序号(Packet Identifier)特性(Properties)载荷(Payload)原因码(Reason Code)名词解释双字节(Two Byte Integer)、四字节数(Four Byte Integ…

JavaWeb开发06-原理-Spring配置优先级-Bean管理-SpringBoot原理-Maven继承和聚合-私服

一、Spring配置优先级 不同配置文件&#xff0c;配置同一个属性谁有效 properties>yml>yaml 命令行参数>Java系统属性 项目打包后要改变属性&#xff1a; 红色是Java系统属性&#xff0c;绿色是命令行参数 ‘ 二、Bean管理 1.获取bean 获取IOC容器&#xff1a;ap…

实验三:软件测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例;…

公司新来的00后真是卷王,工作没两年,跳槽到我们公司起薪18K都快接近我了

​都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他一次聊天才知道,原来这位小老弟家里条件不好,一大家子指望他…

做梦我都没想过,我会在软件测试行业一干就是10年【避坑指南】

我是14年毕业的,普通本科,计算机系也算是一个对口专业。那时候互联网行业是个很不错的发展方向,也是机缘巧合之下,让我走上了测试工程师的道路。但是我没想到,在这个行业一干就是10年。 第一份工作 还记得我刚入行的时候,进了一家社交平台公司做测试,公司最开始只我人一…

智能生产新纪元:化工厂生产可视化引领行业变革

在现代化工业领域,化工厂作为重要的生产基地,其生产过程的监控与管理一直是行业关注的焦点。随着信息技术的飞速发展,可视化技术应运而生,为化工行业的安全生产和高效运营提供了有力支持。在现代化工业领域,化工厂作为重要的生产基地,其生产过程的监控与管理一直是行业关…

OmniPlan Pro for Mac v4.8.0中文激活版 项目流程管理工具

OmniPlan Pro for Mac是一款功能强大的项目管理软件&#xff0c;它以其直观的用户界面和丰富的功能&#xff0c;帮助用户轻松管理各种复杂的项目。 OmniPlan Pro for Mac v4.8.0中文激活版 通过OmniPlan Pro&#xff0c;用户可以轻松创建任务&#xff0c;设置任务的开始和结束时…

React 《入门案例》

一、案例二、创建项目 npm init vite@latest # 选择react # 删除不必要的css,文件等 # 安装依赖classnames、sass、uuid、dayjs、lodash npm i -S classnames # 处理className属性 npm i -S uuid #生成uuid npm i -S dayjs # 日期处理 npm i -S lodash # 操作数组 npm i -D…

【数据结构|C语言版】算法效率和复杂度分析

前言1. 算法效率2. 大O的渐进表示法3. 时间复杂度3.1 时间复杂度概念3.2 时间复杂度计算举例 4. 空间复杂度4.1 空间复杂度的概念4.2 空间复杂度计算举例 5. 常见复杂度对比结语 ↓ 个人主页&#xff1a;C_GUIQU 个人专栏&#xff1a;【数据结构&#xff08;C语言版&#xff09…

java反汇编命令手册

1. 栈和局部变量操作 1.1 将常量压入栈的指令指令 功能描述aconst_null 将null对象引用压入栈iconst_m1 将将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常…

实验3-软件测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例;…

Springboot+Vue项目-基于Java+MySQL的家政服务平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

模拟集成电路设计系列博客——6.1.2 折叠电阻串DAC

6.1.2 折叠电阻串DAC 为了减少数字解码的数量以及大的容性负载,可以使用折叠电阻串D/A,如下图所示[Abrial,1988]:这种方式使得解码非常类似于数字存储器,从而减少了总的解码区域。在上图中的4-bit例子中,为了转换数字码,高2比特{b1,b2}决定了需要选中的单个字线(其他的保…