电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

两种软件设计模式案例分析

16页
  • 卖家[上传人]:re****.1
  • 文档编号:478355090
  • 上传时间:2023-05-17
  • 文档格式:DOCX
  • 文档大小:66.65KB
  • / 16 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、摘要本学期我学习了“设计模式-可复用面向对象软件的基础”这门课程,这次 我采用的是命令模式+策略模式两种设计模式结合的案例。分析的案例为:遥控器控制天花板上的吊扇,它有多种转动速度,当然也允 许被关闭。假设吊扇速度:高、中、低、关闭。采用安全模式+策略设计模式。报告整体结构为:两种设计模式的分析、理解,类图,实例分析、代码分析, 总结。目录第一章命令模式+策略模式11.1命令模式11.1.1 定义11.1.2命令模式的结构11.1.3 角色11.1.4 优点21.1.5 缺点21.5.6适用情况21.2策略模式22.1.1 意图22.2.2主要解决问题22.2.4如何解决32.2.5关键代码32.2.6 优点32.2.7 缺点32.2.8使用场景32.2.9注意事项3第二章案例分析.42.1类图.42.2测试分析.42.3代码分析52.2.1命令模式模块代码52.2.2策略模式模块代码10第三章总结13第一章命令模式+策略模式本案例用到的两种案例为安全模式+策略模式,因此在分析案例之前我先对 两种设计模式进行分析。命令模式具体实现命令调控,策略模式定义一系列的算 法,把它们一个个封装起

      2、来。1.1命令模式1.1.1定义将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参 数化。用于行为请求者”与行为实现者解耦,可实现二者之间的松耦合,以便 适应变化。分离变化与不变的因素。1.1.2命令模式的结构命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任 分割开,委派给不同的对象。每一命令都是一操作:请求的一方发出请求要求执行一操作;接收 的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来, 使得请求的一方不必知道接收请求的一方的接,更不必知道请求是怎么被接 收,以及操作是否被执行、何时被执行,以及是怎么被执行的。1.1.3角色Command定义命令的接,声明执行的方法。ConcreteCommand命令接实现对象,是虚”勺实现;通常会持有接收者,并调用接收者的功 能来完成命令要执行的操作。Receiver接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够 实现命令要求实现的相应功能。Invoker要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。 这个是客户端真正触发命令并要求命令执行相应操作的地

      3、方,也就是说相当于使 用命令对象的入口。Clie nt创建具体的命令对象,并且设置命令对象的接收者。注意这个不是我们常规 意义上的客户端,而是在组装命令对象和接收者,或许,把这个Client称为装配 者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行。1.1.4优点1. 降低对象之间的耦合度。2. 新的命令可以很容易地加入到系统中。3. 可以比较容易地设计一个组合命令。4. 调用同一方法实现不同的功能1.1.5缺点使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命 令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影 响命令模式的使用。1.5.6适用情况1. 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交 互。2. 系统需要在不同的时间指定请求、将请求排队和执行请求。3. 系统需要支持命令的撤销(Un do)操作和恢复(Redo)操作。4. 系统需要将一组操作组合在一起,即支持宏命令。1.2策略模式2.1.1意图定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。2.2.2主要解决问题在有多种算法相似的情况下

      4、,使用if.else所带来的复杂和难以维护。2.2.3何时使用一个系统有许多许多类,而区分它们的只是他们直接的行为。2.2.4如何解决将这些算法封装成一个一个的类,任意地替换。2.2.5关键代码实现同一个接口。应用实例:1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。2、旅行的 出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。3、JAVA AWT 中的 LayoutManager。2.2.6优点1、算法可以自由切换。2、避免使用多重条件判断。3、扩展性良好。2.2.7缺点1、策略类会增多。2、所有策略类都需要对外暴露。2.2.8使用场景1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那 么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。2、一个系统需要动态地在几种算法中选择一种。3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使 用多重的条件选择语句来实现。2.2.9注意事项如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀 的问题。第二章案例分析本文分析的案例为:遥控器控制天花板上的吊扇,它有多种转动速度,当然 也允

      5、许被关闭。假设吊扇速度:高、中、低、关闭。采用安全模式 +策略设计模 式。2.1类图 DiCouand* undci ()G execute 00 enecute)& undo () O CommandQ execute () undo ()G ezBcute ()G undo (I0 OperatiooLOil daOpeiatian (,)爭 swecute ()尙 undo 0G daOperatLcai ()3 Ope rat ioiLlZhng: 1O setCojunsnd (corrariJid.:匚coin arid)* buttonWasPiishe d4 undcButt-oasPiishc d j2.2测试分析本案例运行测试如下,通过控制高档,中档,低档,三个命令来控制分扇转动的 速度,如图2-1,2-2,2-3所示X高档中档低档高矶拦已经JT开图2-1高档风速命令图2-2中档风速命令图2-3低档风速命令2.3代码分析本案例以先以命令模式实现三个命令,再以策略模式定义算法实现,具体实 现代码如下:2.2.1命令模式模块代码1. Command类执行命令的接口pac

      6、kage command;public interface Command public String executepublic String undo();2. N oCommand 类package command;public class NoCommand implements Commandpublic String undo() return null;Overridepublic String execute() return null;3. RemoteLoader 类加载package command;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import java

      7、x.swing.JScrollBar;public class RemoteLoader extends JFrame implements ActionListener private JButton high;private JButton middle;private JButton low;private JLabel text;public RemoteLoader() super(设计模式); setSize(300, 200);setVisible(true);Container pane = getContentPane();FlowLayout flo = new FlowLayout(); pane.setLayout(flo);high = new JButton(高档);high.addActionListener(this);middle = new JButton(中档); middle.addActionListener(this); text = new JLabel();low = new JButton(低档);low.addActionListen

      8、er(this);pane.add(high);pane.add(middle);pane.add(low);pane.add(text); setContentPane(pane);setVisible(true);public void actionPerformed(ActionEvent e) if (e.getSource() = high) high.setBackground(Color.cyan);Context1 context1 = new Context1(new OperationGao1(); String executeStrategygao = context1.executeStrategy(); System.out.println(executeStrategygao); text.setText(executeStrategygao);middle.setBackground(null); low.setBackground(null);if (e.getSource() = middle) middle.setBackground(Color.cyan);Context1 context1 = new Context1(new OperationGao1(); context1 = new Context1(new OperationZhong1();String executeStrategyzhong = context1.executeStrategy(); System.out.println(executeStrategyzhong); text.setText(executeStrategyzhong);high.setBackground(null); low.setBackground(null);if (e.getSource() = low) low.setBackground(Color.cyan);Context1 context1 = new Context1(new OperationGao1(); context1 = new Context1(new OperationDi1();String executeStrategylow = context1.executeStrategy();S

      《两种软件设计模式案例分析》由会员re****.1分享,可在线阅读,更多相关《两种软件设计模式案例分析》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.