软件设计学习入门-1商品打折-v3.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
商品打折 — 装饰模式 李萌 2018 年 5 月 目标 ? 理解设计模式的作用 ? 掌握依赖倒置原则 计算机科学与技术学院 参考图书 ? 设计模式 — 可复用面 向对象软件的基础 ? .NET 应用架构设计原 则、模式与实践 计算机科学与技术学院 设计模式定义 ? 解决一类软件问题并能重复使用的软 件设计方案 计算机科学与技术学院 设计模式 ? 《设计模式 — 可复用面向对象软件的基础 》中描述了 23 个设计模式 ? 分为三种类型:创建型、结构型和行为型 计算机科学与技术学院 5 业务场景 ? 商场促销打折 ? 多种打折方案 ? 卖家折扣, 9 折 ? 商场折扣,满 100 减 10 ? 政府折扣, 22:00~23:59 ,实行 95 折 ? 打折方案组合使用 计算机科学与技术学院 分析 ? 打折是对定价进行计算,获得折后价 ? 多种打折方案组合生效 ? 变化点 ? 折扣计算算法 ? 打折算法组合次序 计算机科学与技术学院 对象建模 ? 识别业务对象,商品 计算机科学与技术学院 属性与业务方法 ? 属性 ? 名称,定价 ? 业务方法 ? 折扣计算 ? 输入定价,返回折后价 计算机科学与技术学院 计算机科学与技术学院 数据类型 ? 属性 ? 名称, string ? 定价, double ? 折扣计算 ? 输入参数,定价, double ? 返回值,折后价, double 计算机科学与技术学院 问题 1 ? 增减打折方案,如 ? 定价超过 1000 打 95 折 ? 更改打折算法,如 ? 将满 100 减 10 更改为满 500 减 25 ? 都会修改商品代码 计算机科学与技术学院 分析 ? 原因:将多个打折方案封装进同一个折扣 计算方法 ? 需求变更时,势必将修改现有代码 ? 显然,这个设计是不稳定的,违反开放 - 封闭原则 OCP 计算机科学与技术学院 解决方案 ? 根本原因:商品打折计算依赖于具体实现 方法,导致设计失去灵活性 ? 解决方案:依赖倒置原则 DIP ? 在商品与具体实现之间增加一层抽象 ? 本例使用接口 ? 使得商品打折计算依赖于接口抽象,不依 赖于实现细节 计算机科学与技术学院 对象模型 计算机科学与技术学院 商品类 打折方案具体实现 计算机科学与技术学院 商品类 打折接口 打折方案具体实现 计算机科学与技术学院 效果 ? 建立多个打折算法类 ? 打折算法类继承打折接口 ? 每个类负责一种打折方案的具体实现 ? 增加打折方案时,只需要按上述步骤创建 打折算法类 ? 无需修改商品代码 计算机科学与技术学院 商品类 打折接口 计算机科学与技术学院 打折算法类 计算机科学与技术学院 问题 2 ? 如何为现有打折方案增加新方案,如在卖 家打完折后,再进行商场打折呢? ? 解决方法之一:使用类的继承 ? 让商场打折类继承自卖家打折类,重写打 折方法 ? 首先调用父类卖家折扣类的计算方法 ? 然后执行商场打折计算 计算机科学与技术学院 分析 ? 但是,当存在 10 个、 20 个甚至更多的类 需要组合时,该方案会引发类爆炸 ? 原因:打折计算过程就是一个为现有打折 算法类增加新功能的过程 打折算法 2 最终价格 ? 定价 打折算法 1 ? 折后价 1 ? 折后价 2 打折算法 3 ? 折后价 3 计算机科学与技术学院 方案 ? 运用装饰模式,结构型设计模式 ? 为类增加功能,避免使用继承引发类爆炸 计算机科学与技术学院 核心 ? 要让折扣算法类之间相互引用,才能使用 上一个类的计算结果,而不使用继承 ? 折扣算法类的共同特征是实现了打折接口 ? 解决方案:将打折接口类型的变量作为折 扣算法类的成员 ? 通过构造函数传入所引用的折扣类 计算机科学与技术学院 打折算法类 计算机科学与技术学院 打折计算 计算机科学与技术学院

文档评论(0)

magui + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档