一、 实验目的与要求
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.结果及分析

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

结构型模式——桥接模式相关推荐

  1. Java设计模式之结构型:桥接模式

    一.什么是桥接模式: 桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥.在现实生活中一个物品在搭配不同的配件时会产生不同的动作和结果, ...

  2. 设计模式(18):结构型-享元模式(Flyweight)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  3. 设计模式之结构型(4)-桥接模式(Bridge)

    (一)定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.(将一个对象多维度的变化分离) ① 桥接模式主要用意是为了实现抽象部分与实现部分脱耦,使它们各自可以独立变化. ② 在开发过程中通常会 ...

  4. 【设计模式·结构型】桥接模式Bridge Pattern

    目的 该模式用于分离抽象与实现,并且抽象与实现可以独立变化 应用场景 (1)希望抽象和实现之间没有固定的绑定关系,不同抽象接口和实现可以组合和扩充,程序运行时动态选择.切换具体实现 (2)类层次结构, ...

  5. 【设计模式自习室】结构型:组合模式 Composite

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  6. VMware虚拟机三种网络模式详解之Bridged(桥接模式)

    VMware虚拟机三种网络模式详解 Bridged(桥接模式) 由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很浪费.那么如何解决这个问题?虚拟机软件是很好 ...

  7. JAVA设计模式详解(六)----------状态模式

    各位朋友,本次LZ分享的是状态模式,在这之前,恳请LZ解释一下,由于最近公司事情多,比较忙,所以导致更新速度稍微慢了些(哦,往后LZ会越来越忙=.=). 状态模式,又称状态对象模式(Pattern o ...

  8. 设计模式详解(四)--------建造者模式

    一.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 二.使用范围 1.创建一个复杂的对象,他有多个不同的模块组成,其中有些模块不会改变, ...

  9. 《精通Python设计模式》学习结构型之MVC模式

    这个就不需要多评论了, 哪个主流的PYTHON的WEB框架都有这些模式实现哈. quotes = ('A man is not complete until he is married. Then h ...

  10. 设计模式详解(五)——建造者模式

    一.场景问题 大家很多人应该都玩过LOL(英雄联盟)这款游戏,博主从S4赛季一直玩到现在,可以说这块游戏陪伴了我整个大学生涯.正好现在S10入围赛已经快接近尾声,即将到精彩的小组赛了.当前这篇文章不是 ...

最新文章

  1. python生成日历_Python 生成日期列表
  2. 1.java局部变量 实例变量 类变量(静态变量)
  3. CSS 基础知识(二)
  4. DHCP和DHCP中继功能与配置
  5. 研究生从事学术研究的20条法则:导师错的时候不多!
  6. Win7系统默认浏览器的更改教程
  7. Java笔记-JPA保存数据时指定列不插入提交(CURRENT_TIMESTAMP)
  8. python函数返回布尔值_python-3.x - 函数不返回正确的布尔值 - SO中文参考 - www.soinside.com...
  9. java dns 解析域名解析_java网络学习 java dns 域名解析协议实现
  10. 视频压缩工具及使用方法
  11. 【JZOJ5882】雪人
  12. Key was created with errors:报错
  13. Seventh season fifteenth episode,Joey got a new brain??????
  14. CLH lock queue的原理解释及Java实现
  15. linux中mtd是什么目录,关于linux mtd的理解
  16. 使用jquery,按回车键实现tab键的功能
  17. Webpack项目中引入Bootstrap4.x
  18. Android 源码编译环境搭建
  19. oracle 中fuser,关于fuser的使用方法
  20. 井贤栋专访:新技术和全球化是蚂蚁金服未来投资重点

热门文章

  1. C# dataGridView隔行显示不同颜色
  2. Android之实现首尾带圆角的多颜色水平条
  3. linux之vim操作快速跳到下一个空格和上一个空格命令
  4. linux环境下用TcpDump抓包分析总结
  5. aop在项目中的实际运用_【消防验收】防火玻璃在实际运用中的四大关键问题
  6. Android启动过程五个步骤,Android启动流程、app启动原理
  7. 安装bigdesk后es无法启动_安装天正后,探索者无法双击启动?
  8. python手机自动化截图_python UI自动化截图对比
  9. 实验 2 关键字驱动测试(2 学时)实验报告--软件功能测试与性能测试实验
  10. 钟南山团队在患者粪便中检出新冠活病毒,国家卫健委回应!专家:做好这事很重要...