结构型模式——桥接模式

一、 实验目的与要求
1.练习使用桥接模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。
2.实验结束后,对相关内容进行总结。
二、实验内容
1.模式应用场景说明
相信大家都看过罗老师买奶茶的情节,现实生活中也是一样,奶茶分为大杯中杯和小杯,而奶茶的口味有多种多样,是每一种都对应好几个不同的杯型,可以将杯形和口味分别分开,就形成了各式各样的,各种大小的奶茶了。
2.应用场景类图
在这里插入图片描述

3.实现代码与解释
3.1奶茶类(接口)

package 桥接模式;
public interface 奶茶{void nc(String cupType,String name);//里面有奶茶杯的大小,还有奶茶的种类
}

3.2奶茶杯类

package 桥接模式;public abstract class 奶茶杯		//定义一个抽象类,  奶茶杯
{protected 奶茶 milktea;   //定义一个受保护的类    奶茶类public void setweidao(奶茶 milktea)	//定义一个方法,将(奶茶 milktea)作为参数传递进来{this.milktea=milktea;}public abstract void weidao(String name);	//定义一个抽象类,目的是选择不同的奶茶口味。将名字传递进来。
}

3.3杯子类型

package 桥接模式;public class 大杯 extends 奶茶杯{public void weidao(String name)	//定义方法,将奶茶的名字传递进来。与杯子进行结合{String cupType="大杯装....";this.milktea.nc(cupType,name);		}	
}

3.4奶茶口味类

package 桥接模式;
public class 巧克力味 implements 奶茶
{public void nc(String cupType,String name)	//将写好的奶茶,,,传递进杯子类型大小,,奶茶名字。组合成不同的奶茶{System.out.println(cupType + "巧克力味"+ name + ".");}
}

3.5客户端代码

package 桥接模式;public class Client {public static void main(String []args) {奶茶 ncmm;奶茶杯 Cup;ncmm=(奶茶)XMLUtil.getBean("nc");Cup=(奶茶杯)XMLUtil.getBean("cup");Cup.setweidao(ncmm);Cup.weidao("nice");}
}

3.6外部文件以及配置

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(String args){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;							doc = builder.parse(new File("E:\\eclipse-workspace\\桥接模式\\src\\桥接模式\\BridgeconfigPen.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;}}
}

4.结果及分析
在这里插入图片描述

三、实验总结
通过桥接模式的练习,让我们明白了。桥接模式是将加法变成乘法的模式。通过两个不同的维度变化,可以创建出许许多多的不同的相似产品来。但是重复代码会很多。类的结构过于复杂,继承关系太多,难于维护,最后最致命的一点是扩展性太差。

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

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

相关文章

TypeScript+vue使用与迁移经验总结

源宝导读:ERP平台的前端底层使用了Vue作为组件的基础架构,而使用了TypeScript语言进行组件的封装与开发。本文将简要介绍平台在使用TypeScript和Vue框架进行老功能重构时的经验总结。一、背景下面主要探讨是以下三个方面:目前项目中使用到的v…

结构型模式——适配器模式

一、 实验目的与要求 1.练习使用适配器模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。 2.实验结束后,对相关内容进行总结。 二、实验内容 1.模式应用场景说明 现在喜欢上网的年轻人越来越多,而家里面的电脑满足…

[号外] Blazor wasm 其实也挺快!

之前第一篇的时候,因为没有用任意配置,导致wasm加载很慢,我就感觉不会是这样的,为了不误导小盆友,所以还是趁着周末研究了一波,做了相关的调整,经过测试,速度基本可观了,…

WinUI 3 试玩报告

1. 什么是 WinUI 3#在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员可以在 Win32 中使用 WinUI。WinUI 3 Preview 1 包含新的 VisualStudio 项目模板,可以创建面向 .NET 5 的 C# 和 C/Win32 项目…

记一次EF Core连接MySql、Oracle

点击上方“Dotnet9”添加关注哦上上个月写的一篇文章,今天有同事问我使用EF Core连接MySql和Oracel的问题,我把这篇文章直接甩给了他。下面是正文:这几天研究了EF Core对MySql、Oracle的操作,包括连接、简单查询等,操作…

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

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

Codeforces Round #719 (Div. 3)/ Codeforces Round #720 (Div. 2)

A. Do Not Be Distracted! 题意: 一件事情一但开始,只能做完才能做别的事,当出现一件事不连续出现时,教师会怀疑 题目: Polycarp has 26 tasks. Each task is designated by a capital letter of the Latin alphab…

dotNET Core 3.X 使用 Autofac 来增强依赖注入

在上一篇《dotNET Core 3.X 依赖注入》中简单介绍了 dotNET Core 框架本身的依赖注入功能,大部分情况下使用框架的依赖注入功能就可以满足了,在一些特殊场景下,我们就需要引入第三方的注入框架。为什么要使用 Autofac?如果您在之前…

[JS-DOM]DOM概述

DOM: * 概念: Document Object Model 文档对象模型* 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作* W3C DOM 标准被分为 3 个不同的部分:* 核心 DOM - 针对任何结构…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)

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

2021年度训练联盟热身训练赛第一场 H题On Average They‘re Purple(BFS)

题意: 给你一些联通关系,问Bob先选择一些路径(1~n)联通,Alice在路径上染色,Bob的目的是选择一些路径使得染色变化最小,对于Alice来说,需要使得在Bob选择的(1−n1-n1−n&…

使用请求头认证来测试需要授权的 API 接口

使用请求头认证来测试需要授权的 API 接口Intro有一些需要认证授权的接口在写测试用例的时候一般会先获取一个 token,然后再去调用接口,其实这样做的话很不灵活,一方面是存在着一定的安全性问题,获取 token 可能会有一些用户名密码…

双端队列 BFS + Chamber of Secrets CodeForces - 173B

题意: 一个 nmn\times mnm 的图,现在有一束激光从左上角往右边射出,每遇到 ‘#’,你可以选择光线往四个方向射出,或者什么都不做,问最少需要多少个 ‘#’ 往四个方向射出才能使光线在第 n 行往右边射出。 …

程序员过关斩将--作为一个架构师,我是不是应该有很多职责?

点击上方“蓝字”关注我们领取架构书籍每一个程序员都有一个架构梦。上面其实本质上是一句富有事实哲理的废话,要不然也不会有这么多人关注你的公众号。这些年随着“企业数字化”转型的口号,一大批企业奔跑在转型的路上,希望领先一步对手将企…

Excel使用技巧,补充中。。。

Excel表怎么把名字按字母排序 然后后面的数据也跟着变动 1、首先在excel表格的A列单元格中输入字母,选中需要排序的A列和B列单元格。 2、然后点击工具栏“数据”中的“排序”。 3、在弹出的对话框中的“次序”下拉框中选择“自定义序列”。 4、然后在弹出的对话…

递归函数中局部变量和全局变量

有时候会因为不注意递归函数中局部变量和全局变量,而导致结果和我们期望的不一致,递归中,在递归中的局部变量和全局变量,可以类似的看成函数调用时传递方式的按值传递(局部变量)和引用传递(全局…

基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)

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

Azure App Service 如何在第一时间用上最新版 .NET Core

点击上方关注“汪宇杰博客” ^_^导语微软会经常对 .NET Core 发布更新,通常为安全补丁。这不,今天早上,.NET Core 3.1.5 更新发布了。然而 Azure App Service 自身的 .NET Core runtime 并不会在第一时间更新,每次都要等几周后微软…

我们是如何做DevOps的?

一、DevOps的理解DevOps的概念理解DevOps 的概念在软件开发行业中逐渐流行起来。越来越多的团队希望实现产品的敏捷开发,DevOps 使一切成为可能。有了 DevOps ,团队可以定期发布代码、自动化部署、并将持续集成 / 持续交付作为发布过程的一部分。一句话概…

word文档相关使用

主要是为了记忆,有的时候,之前查阅过,后来使用又忘记了,以后碰了就陆续添加吧,先开一个博文 文章目录插入图片,显示不全的问题:方法一:方法二:方法三:在左侧显…