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. sourceTree回退撤销commit

    https://blog.csdn.net/gang544043963/article/details/71511958

  2. 小型网站使用高德地图开发定位模块需要的php代码

    项目要求: 1.使用定位,获取gps信息 2.获取当前所在城市 3.从该城市中取数据,按照距离我的当前位置远近排序 方案 1.使用js获取当前位置信息,然后使用cookie或者session存储 fu ...

  3. Windebug调试

    .loadby SOS clr .Symfix .reload !threads !printexception [address]

  4. Linux命令:在线练习地址

    1.https://www.tutorialspoint.com/unix_terminal_online.php 2.https://www.tutorialspoint.com/index.htm ...

  5. 身份证运算符 is 和 is not(检查两个数据在内存当中是否是同一个值) | 逻辑运算符 and or not | 数据类型的判断 isinstance

    # ###身份证运算符 is 和 is not(检查两个数据在内存当中是否是同一个值) var1 = 6 var2 = 6 print(id(var1),id(var2)) var1 = " ...

  6. PHP中array_merge和array+array的区别

    在PHP中可以使用array_merge函数和两个数组相加array+array的方式进行数组合并,但两者效果并不相同,区别如下: 当下标为数值时,array_merge()不会覆盖掉原来的值,但ar ...

  7. ARIMA模型总结

    时间序列建模基本步骤 获取被观测系统时间序列数据: 对数据绘图,观测是否为平稳时间序列:对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列: 经过第二步处理,已经得到平稳时间序列.要对平稳时间序 ...

  8. IdentityServer4授权和认证集成Identity和profile

    identiyt的使用可以看之前的文章:https://www.cnblogs.com/nsky/p/10323415.html 之前的ids4授权服务器都是用的in-men方式把数据添加到内存, 现 ...

  9. https学习笔记三----OpenSSL生成root CA及签发证书

    在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...

  10. debug调试命令