创建型模式——建造者模式

一、 实验目的与要求

1.练习使用工厂模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。
2.实验结束后,对相关内容进行总结。

二、实验内容

1.模式应用场景说明

Decis创建一个获取多套餐信息,包含A套餐(鸡肉堡+橙汁)B套餐(炸鸡和咖啡)构造一份完整套餐,返回给顾客。

2.应用场景类图

3.实现代码与解释

3.1产品类Meal

package 创建者模式;public class Meal {private String food;private String drink;public void setFood(String food) {this.food=food;}public void setDrink(String drink) {this.drink=drink;}public String getFood() {return(this.food);}public String getDrink() {return(this.drink);}
}

3.2抽象构造类MealBuilder

package 创建者模式;public abstract class MealBuilder {protected Meal meal=new Meal();public abstract void buildFood();public abstract void buildDrink();public Meal getMeal() {return meal;}
}

3.3具体构造类SubMealBuilderA

package 创建者模式;public class SubMealBuilderA extends MealBuilder{public void buildFood() {meal.setFood("一个鸡肉堡");}public void buildDrink() {meal.setDrink("一杯橙汁");}
}

3.4具体构造类SubMealBuilderB

package 创建者模式;public class SubMealBuilderB extends MealBuilder{public void buildFood() {meal.setFood("一只炸鸡");}public void buildDrink() {meal.setDrink("一杯咖啡");}
}

3.5指挥者类DecisWaiter

package 创建者模式;public class DecisWaiter {private MealBuilder mb;public void setMealBuilder(MealBuilder mb) {this.mb=mb;}public Meal construct() {mb.buildFood();mb.buildDrink();return mb.getMeal();}
}

3.6客户端测试类Client

package 创建者模式;public class Client {public static void main(String args[]) {MealBuilder mb=(MealBuilder)XMLUtil.getBean();DecisWaiter waiter=new DecisWaiter();waiter.setMealBuilder(mb);Meal meal=waiter.construct();System.out.println("套餐组成:");System.out.println(meal.getFood());System.out.println(meal.getDrink());}
}

3.7辅助代码:获取外界配置文件的信息

package 创建者模式;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean(){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;							doc = builder.parse(new File("C:\\Users\\33132\\eclipse-workspace\\创建者模式\\src\\创建者模式\\config.xml")); //获取包含类名的文本节点NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName("创建者模式."+cName);Object obj=c.newInstance();return obj;}   catch(Exception e){e.printStackTrace();return null;}}
} 

3.8外界配置文件

在这里插入图片描述

4.结果及分析

4.1将配置文件节点改成SubMealBuilderA

在这里插入图片描述

4.2将配置文件节点改成SubMealBuilderB

在这里插入图片描述

三、实验总结

优点:指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”;
缺点:产品内部变化复杂,则会使系统变得庞大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio模拟器的安装与使用

来回弄了好几遍,网上也都搜过下载过很多版本,其中夜神模拟器是真的方便,也好用,棒极了!那么我就来分享一下: 第一,肯定是下载啦 下载链接:夜神模拟器官方 接着就是连接了&#xff0c…

如何训练解决问题的能力?

作为程序员,技术能力固然很重要,但平时除了提升技术能力也别忽略了其它方面的能力。你可以写一辈子代码,但你不能一辈子只写代码。当你的技术能力足以使你在公司站稳脚跟时,你可以停下来锻炼自己的管理能力,比如职场中…

PS照片换底色

因为写简历嘛,手边没有白色底的照片,就用ps换了个底色,记录一下,下次可能还要用。这里我用幂幂的照片来代替。 打开ps,点击文件,点击打开,找到你需要处理的照片。 -点击旁边的对象选择工具&…

小心 HttpClient 中的 FormUrlEncodeContent 的 bug

小心 HttpClient 中的 FormUrlEncodeContent 的 bugIntro最近发现活动室预约项目里的上传图片有时候会有问题,周末找时间测试了一下,发现小图片的上传没问题,大图片上传会有问题,而且异常信息还很奇怪,System.UriForma…

IDEA导入MySQL的jdbc驱动出现“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”

目录 一、一般的解决思路 1、JDBC下载链接 2、选择下载内容,并进行下载 3、将驱动导入java项目 二、依然导入驱动失败怎么办 当我们在idea中使用java操作mysql数据库时会出现: Exception in thread "main" java.lang.ClassNotFoundExce…

Android程序设计基础-设计布局之伪今日头条主界面

一、 实验目的 (1) 掌握Andriod Studio的基本使用方法; (2) 掌握Andriod Studio中常用的控件及其使用方法; 二、实验内容 (1)使用Android Studio编写任意一个Android程序并运行&a…

基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)

系列文章使用 abp cli 搭建项目给项目瘦身,让它跑起来完善与美化,Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API,包装返回模型再说Swagger,分组、描述、小绿锁接入GitHub,用JWT保护你的API异常处理和…

MySql轻松入门系列——第一站 从源码角度轻松认识mysql整体框架图

一:背景1. 讲故事最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlserver是不可能…

嫌弃俄罗斯的火箭报价太黑!马斯克自己造火箭!SpaceX首次载人发射任务成功!太牛了!...

当你仰望天空,可曾想象到,距地8公里的平流层每分钟有65架飞机在天空穿梭,距地20公里有太阳能激光通信无人机展翅翱翔、高空通信热气球悠闲的漂荡,再往上有世界各大企业的低轨宽带卫星,在往上是各国的若干低轨道、中轨道…

ASP.NET Core 3.x API版本控制

前言一般来说需要更改我们API的时候才考虑版本控制,但是我觉得我们不应该等到那时候来实现它,我们应该有一个版本策略从我们应用程序开发时就开始制定好我们的策略,我们一直遵循着这个策略进行开发。我们其实可以通过多种方式进行实现我们API…

[JavaWeb-HTML]HTML标签_文本标签_练习

案列效果: 文本素材: "中关村黑马程序员训练营"是由传智播客联合中关村软件园、CSDN, 并委托传智播客进行教学实施的软件开发高端培训机构,致力于服务各大软件企业,解决当前软件开发技术飞速发展, 而企业招不到优秀人才…

在 WSL2.0 的 Ubuntu 18 里使用 Docker

近日,随着Windows 10 2004版本的发布,WSL 2经过了近一年的insider测试,现在也正式上线了。Windows 10 2004中引入了一个真实的Linux kernel,使得系统全部的系统调用更加兼容。这也是首次,Linux kernel安装在Windows系统…

基本程序单元Activity—Activity生命周期之数据传递小程序

一、 实验目的 (1) 掌握Andriod Studio的基本使用方法; (2) 掌握Andriod Studio中常用的控件及其使用方法; 二、 实验内容 题目: 编写一个数据传递的小程序,要求在第一个界面输入…

Asp.Net Core+Dapper开发直播平台!

现在直播大热,从游戏直播到直播带货,这几年都是最热门的了。教育直播、视频会议、云点播等各种基于直播构建的业务模式,让众多企业也都开始配备自己的直播平台。14年在公司带队做了个游戏直播平台,疫情期间在家重构了下项目&#…

Magicodes.IE 在100万数据量下导入导出性能测试

原文作者:HueiFeng前言目前Magicodes.IE更新到了2.2.3,感谢大家的支持,同时建议大家在使用过程中如果遇到一些问题或者说需要一些额外的功能可以直接提issues,当然更建议大家提PR。‍近期更新2020.05.24 【Nuget】版本更新到2.2.2…

[JavaWeb-HTML]HTML文本标签

文本标签&#xff1a;和文本有关的标签 * 注释&#xff1a;<!-- 注释内容 -->* <h1> to <h6>&#xff1a;标题标签* h1~h6:字体大小逐渐递减* <p>&#xff1a;段落标签* <br>&#xff1a;换行标签* <hr>&#xff1a;展示一条水平线* 属性&…

我的『MVP.Blazor』快速创建与部署

‍最近一直在录Blog.Core相关的操作视频&#xff0c;也没有研究过什么新的东西&#xff0c;公司也各种项目迭代&#xff0c;特别是从Fwk迁移到NetCore&#xff0c;真的是不是一个容易的事&#xff0c;闲的时候&#xff0c;为了歇歇脑子&#xff0c;就抽出时间简单看了看又有哪些…

.NET IDE Rider公布2020.2路线图

跨平台 .NET IDE Rider 近日公布了 2020.2 的路线图&#xff0c;介绍了目前正在开发的一些特性&#xff0c;并表示其中一些可能在接下来的版本中出现。主要包括&#xff1a;Windows 上的 .NET Core 后端&#xff1a;Rider 2020.1 已在 macOS 和 Linux 上的 .NET Core 上运行 Re…

字符串太占内存了,我想了各种奇思淫巧对它进行压缩

一&#xff1a;背景1. 讲故事在我们的一个全内存项目中&#xff0c;需要将一家大品牌店铺小千万的trade灌入到内存中&#xff0c;大家知道trade中一般会有订单来源,省市区 &#xff0c;当把这些字段灌进去后&#xff0c;你会发现他们特别侵蚀内存&#xff0c;因为都是字符串类型…