Design Pattern (1) 设计模式(1) Institute of Computer Software 2021/2/5 Nanjing University
设计模式(1) Design Pattern (1) 2021/2/5 Institute of Computer Software Nanjing University 1
最病 过摘要 2 口 Agile Design a design principles 口 Design Patterns a Why What, How a Creational structural and behavioral patterns Institute of Computer Software 2021/2/5 Nanjing University
摘要 Agile Design design principles Design Patterns Why, What, How Creational, Structural and Behavioral Patterns 2021/2/5 Institute of Computer Software Nanjing University 2
最病 A Design Principles 口SRP单一职责原则 口OCP开放-封闭原则 口 LSP Liskov(里氏)替换原则 口DP依赖倒置原则 口|SP接口隔离原则 D CARP(Composition/ Aggregation Reuse Principle 合成/聚合复用原则 LoD( Law of demeter)迪米特法则 Institute of Computer Software 2021/2/5 Nanjing University
Design Principles SRP 单一职责原则 OCP 开放-封闭原则 LSP Liskov(里氏)替换原则 DIP 依赖倒置原则 ISP 接口隔离原则 CARP (Composition/Aggregation Reuse Principle ) 合成/聚合复用原则 LoD (Law of Demeter) 迪米特法则 2021/2/5 Institute of Computer Software Nanjing University 3
最病 E CARP 口 Composition(合成)s. Aggregation(聚合) 口聚合表示“拥有”关系或者整体与部分的关系 口合成是一种强得多的“拥有”关系——部分和整体 的生命周期是一样的。 口换句话说:合成是值的聚合( Aggregation by Value),而一般说的聚合是引用的聚合 (Aggregation by Reference) Institute of Computer Software 2021/2/5 Nanjing University
CARP Composition(合成) vs. Aggregation(聚合) 聚合表示“拥有”关系或者整体与部分的关系 合成是一种强得多的“拥有”关系——部分和整体 的生命周期是一样的。 换句话说:合成是值的聚合(Aggregation by Value),而一般说的聚合是引用的聚合 (Aggregation by Reference) 2021/2/5 Institute of Computer Software Nanjing University 4
复用 5 口复用的基本种类 口合成/聚合复用:将已有对象纳入到新对象中,使 之成为新对象的一部分 继承 Institute of Computer Software 2021/2/5 Nanjing University
复用 复用的基本种类 合成/聚合复用:将已有对象纳入到新对象中,使 之成为新对象的一部分。 继承 2021/2/5 Institute of Computer Software Nanjing University 5
复用 6 口继承的优点 口新类易实现 口易修改或扩展 口继承的缺点: 口继承复用破环包装,白箱复用 口超类发生变化,子类不得不改变 口继承的实现是静态的,不能在运行时改变 Institute of Computer Software 2021/2/5 Nanjing University
复用 继承的优点: 新类易实现 易修改或扩展 继承的缺点: 继承复用破环包装,白箱复用. 超类发生变化,子类不得不改变. 继承的实现是静态的,不能在运行时改变. 2021/2/5 Institute of Computer Software Nanjing University 6
复用 7 口合成/聚合的优点 口新对象存取成分对象的唯一方法是通过成分对象的接口。 口黑箱复用,因为成分对象的内部细节是新对象所看不见的。 口支持包装。 口所需的依赖较少。 口每一个新的类可以将焦点集中在一个任务上。 口这种复用可以在运行时间内动态进行,新对象可以动态的引用与 成分对象类型相同的对象。 口作为复用手段可以应用到几乎任何环境中去 口缺点:系统中会有较多的对象需要管理 Institute of Computer Software 2021/2/5 Nanjing University
复用 合成/聚合的优点 新对象存取成分对象的唯一方法是通过成分对象的接口。 黑箱复用,因为成分对象的内部细节是新对象所看不见的。 支持包装。 所需的依赖较少。 每一个新的类可以将焦点集中在一个任务上。 这种复用可以在运行时间内动态进行,新对象可以动态的引用与 成分对象类型相同的对象。 作为复用手段可以应用到几乎任何环境中去。 缺点:系统中会有较多的对象需要管理 2021/2/5 Institute of Computer Software Nanjing University 7
复用 口优先使用对象合成/聚合,而不是继承 口利用合成/聚合可以在运行时动态配置组件的功 能,并防止类层次规模的爆炸性增长 口区分HASA和SA Institute of Computer Software 2021/2/5 Nanjing University
复用 优先使用对象合成/聚合,而不是继承 利用合成/聚合可以在运行时动态配置组件的功 能,并防止类层次规模的爆炸性增长 区分HAS-A 和 IS-A 2021/2/5 Institute of Computer Software Nanjing University 8
复用 口Cod法则:什么时候使用继承作为复用的工具 口只有当以下Cod条件都满足时才应当使用继承 口子类是超类的一个特殊种类,而不是超类的一个角色,也就是区 分“HaS-A和“A”。只有“s-A关系才符合继承关系,“Has-A” 关系应当用聚合来描述。 口永远不会出现需要将子类换成另外一个类的子类的情况。如果不 能肯定将来是否会变成另外一个子类的话,就不要使用继承 子类具有扩展超类的责任,而不是具有置换调( override)或注销 掉(№U|fy)超类的责任。如果一个子类需要大量的置换掉超类的 行为,那么这个类就不应该是这个超类的子类 口只有在分类学角度上有意义时,才可以使用继承。不要从工具类 继承。 Institute of Computer Software 2021/2/5 Nanjing University
复用 Coad法则:什么时候使用继承作为复用的工具 只有当以下Coad条件都满足时才应当使用继承 子类是超类的一个特殊种类,而不是超类的一个角色,也就是区 分“Has-A”和“Is-A”。只有“Is-A”关系才符合继承关系,“Has-A” 关系应当用聚合来描述。 永远不会出现需要将子类换成另外一个类的子类的情况。如果不 能肯定将来是否会变成另外一个子类的话,就不要使用继承。 子类具有扩展超类的责任,而不是具有置换调(override)或注销 掉(Nullify)超类的责任。如果一个子类需要大量的置换掉超类的 行为,那么这个类就不应该是这个超类的子类。 只有在分类学角度上有意义时,才可以使用继承。不要从工具类 继承。 2021/2/5 Institute of Computer Software Nanjing University 9
最病 A LoD 口别名: Least Knowledge Principle最少知识原则 口表述 口只与你直接的朋友们通信 Only talk to your immediate friends 口不要跟陌生人说话 Don's talk to strangers 口每一个软件单位对其他的单位都只有最少的知识,而且局限 于那些与本单位密切相关的软件单位。 Institute of Computer Software 2021/2/5 Nanjing University
LoD 别名:Least Knowledge Principle 最少知识原则 表述: 只与你直接的朋友们通信 Only talk to your immediate friends 不要跟陌生人说话 Don's talk to strangers 每一个软件单位对其他的单位都只有最少的知识,而且局限 于那些与本单位密切相关的软件单位。 2021/2/5 Institute of Computer Software Nanjing University 10