GRASP原则六: 多态 Polymorphism
   How to handle alternative behaviors based on type 如何处理依据类型不同而有 不同行为的一类需求 ?

     比如,开餐馆

       苏州人喜欢甜、四川人喜欢麻、湖南人喜欢辣,咋处理 ?
1.1 9条GRASP原则

   Information Expert

     responsibilities should be assigned to objects that contain relevant information

   Creator

     the creator of an object is usually an object that contains, or aggregates it

   High Cohesion

     responsibilities of a certain class must be highly related

   Low Coupling

     interdependency between classes should remain low

   Controller

     class which handles external system events

   Polymorphism 多态原则

   Indirection 间接原则

   Pure Fabrication 纯虚构原则

   Protected Variations 隔离变化
1.2 Iteration 2 More Requirement

   第一次迭代结束时,完成了

     当前软件功能测试:单元测试、用户可接受测试、负载测试、可使用性测试等

     必须有客户加入,并给出反馈 Customers engaged in and feedback

     把基线稳定下来,发布内部版本 stabilized baseline internal release

   第二次迭代时,要考虑加入新的功能

     需求变化、业务规则细化、考虑更多的用例

     制定本次迭代的计划活动等

     Ex, Monopoly game

       When a player lands on the Go square, the player receives $200

       When a player lands on the Go-To-Jail square, they move to the Jail square

       When a player lands on the Income-Tax square, the player pays the minimum of $200 or 10%

        of their worth
1.2 Iteration 2 More Requirement

   例如POS系统,第二次迭代时增加另外的需求

     支持多种第三方服务的接口 Support for variations in third-party external services

       计算税费、信用卡授权认证等

     复杂的定价机制 Complex pricing rules

     可插拔的业务规则 Pluggable business rules

     GUI窗口在信息发生变化时得到更新 GUI window updates when information changes

   这些功能点,可能属于前轮迭代同样的用例,但更多的是讨论非功能性需求

   这些需求对领域模型的影响较小

   同样一项功能,原来一种处理方法就可以,现在需要适应多种处理方法,设 计方案该如何支持?

     比如付费:现金、储蓄卡、信用卡、支付宝、微信
1.3 GRASP rule6: Polymorphism(多态)

   Name: Polymorphism(多态)

   Problem:

     如何处理依据类型不同而有不同行为的一类需求?

    How to handle alternative behaviors based on type?

    How to create pluggable software components?

   Solution:

     使用多态操作为依据类型变化的行为 进行职责分配

      When related alternatives or behaviors vary by type (class), assign responsibility for the

      behavior using polymorphic operations to the types for which the behavior varies

   Corollary(推论):

     不要去测试对象的类型或者条件逻辑,并以此选择相应的行为

      Do not test for the type of an object and use conditional logic to perform varying alternatives

      based on type

     即,不要使用条件逻辑,而是为不同的类定义相同名字的方法

      That is, don’t use conditional logic, but assign the same name to services (methods) in

      different classes

     不同的类实现了相同的接口、或者有一个共同的父类(继承)The different classes usually

      implement a common interface or are related in an implementation hierarchy with a

      common superclass

7.6 GRASP原则六: 多态 Polymorphism的更多相关文章

  1. 7.9 GRASP原则九: 隔离变化

    GRASP原则九: 隔离变化  Protected Variations  需求一定会变化的!如何做到以系统的局部变化为代价就可以应对这一点?4.1 GRASP rule9: Protected ...

  2. 7.1 通用的职责分配软件原则 GRASP原则一: 创建者 Creator

    1.GRASP原则一: 创建者 Creator  Who should be responsible for creating a new instance of some class 由谁来负责创 ...

  3. 运用GRASP原则来做uml交互类图-------pos机实例

    重要的几个GRASP原则:1.控制器模式   2.创建者模式 (原则)3.信息专家模式(原则) 4. 高内聚 低耦合   这里所说的模式并不是java中针对具体的事件的设计模式 主成功场景的几个操作: ...

  4. 7.8 GRASP原则八: 间接 Indirection

    GRASP原则八: 间接 Indirection  若两个对象直接连接,导致耦合太紧,如何解决?3.1 GRASP rule8: Indirection 间接  Name: Indirection ...

  5. 7.7 GRASP原则七: 纯虚构 Pure Fabrication

    GRASP原则七: 纯虚构 Pure Fabrication  如果依据信息专家原则获得的解决方案不合适,既不想违反低耦合.高内聚,也不想违 反其他的原则, 该如何把职责分配给对象?  左右为难… ...

  6. 7.5 GRASP原则五:高内聚 High Cohesion

    GRASP原则五:高内聚 High Cohesion  How to keep objects focused, understandable and manageable, and as a si ...

  7. 7.4 GRASP原则四:控制器 Controller

    4.GRASP原则四:控制器 Controller  What first object beyond the UI layer receives and co-ordinates (control ...

  8. 7.3 GRASP原则三: 低耦合 Low Coupling

    3.GRASP原则三: 低耦合 Low Coupling  How to support low dependency, low change impact and increased reuse? ...

  9. 7.2 GRASP原则二:信息专家 Information Expert

    2.GRASP原则二:信息专家 Information Expert  What is a general principle of assigning responsibility to obje ...

随机推荐

  1. 电力电子MATLAB

    1.电力电子仿真时,要加一个powergui 2.变压器Multi-Winding Transformer 其中额定电压比就是匝数比,并且变压器上的电压不能超过额定电压 上图这一项表示变压器的容量和频 ...

  2. usb_camera

  3. MAVEN_day02快速入门

    一.MAVEN工程目录结构 二.怎么在Eclipse中集成M2E插件(工欲善其事必先利其器)有一些准备工作 1.修改自己下载的MAVEN 2.设置本地仓库 三.构建MAVEN工程 1.选择“MAVEN ...

  4. SpringMVC(四):什么是HandlerAdapter

    一.什么是HandlerAdapter Note that a handler can be of type Object. This is to enable handlers from other ...

  5. svn 目录

    svn介绍 SVN与Git的区别 SVN服务的模式和多种访问方式 多种访问原理图解与优缺点 SVN安装部署 svn 部署 配置 配置svn用户及密码 配置svn用户及权限 svn 启动命令讲解 svn ...

  6. 唯美MACD-完全版

    前言: 自己很喜欢MACD这个指标,因为很欠缺所以就搜集的多一点,有人问,学习缠为什么还这么搜集些Macd的资料呢?因为在分析走势(或盘整背驰.或趋势背驰)的时候我的习惯使用Macd做辅助判断,所以M ...

  7. Python3使用AES加密的库函数PyCrypto、PyCryptodome

    我们在网上查看Python爬虫教程的时候,细心的朋友会发现:很多网站为了降低服务器的请求压力都做了各式各样的反爬策略,浏览器通过http post请求服务器端数据时,传输的data字段很多都是经过加密 ...

  8. linux delete file

    今天不小心生成了这么个文件名的文件-ep-ser 然后 rm -ep-ser就删除不了,它认为-e是option 后来,用rm ./-ep-ser就顺利删除了,哈哈,教训啊

  9. ASM磁盘组剔盘、加盘实施过程

    Task:从一个ASM磁盘组中剔除一块盘,加入到另一个ASM磁盘组. 环境:AIX6.1 + Oracle RAC 11.2.0.3 前期准备: 1.查看DG磁盘组空间情况: --查看DG磁盘组空间情 ...

  10. webform-AJAX

    AJAX = 异步 JavaScript和XML(标准通用标记语言的子集).AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着 ...