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