`

十:合成/聚合复用原则

阅读更多
合成/聚合复用原则经常又叫做合成复用原则,就在在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的,这个设计原则有另一个更加简短的表述,要尽量使用合成/聚合,尽量不要使用继承.

我们通常不在新的对象里面拥有需要的对象,而应当最好拥有对象所在的工厂,这样又把工厂模式应用过来,这是我的灵感..^-^

一:复用的基本类型

A:合成/聚合复用,由于合成或聚合可以将已有的对象纳入到新对象中,使之成为新对象的一部分,因此新的对象可以调用已有对象的功能,这样做有下面好处:
(1)新对象存取成分对象的唯一方法是通过成分对象的接口
(2)这种复用可以在运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象
(3)这种复用是黑箱复用,因为成分对象的
.......
B:通过继承达到复用的目的
继承的优点是修改或扩展继承而来的实现较为容易,它有如下缺点:
(1)因为继承超类的实现细节暴露给子类,所以继承破坏了封装性,因此又称为"白箱"复用
(2)当修改基类时,使得我们不得不修改子类.
(3)从超类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性.

二:区分"Has-A"与"Is-A"
"Has-A"是严格的分类学意义上的定义,意思是一个类是另一个类的"一种",而"Has-A"则不同,它表示某一个角色具有某一项责任。
有一个人类H,请看下面一个例子,假如我们再设计三个类:雇员类E,经理类M,学生类S,如果我们把这三个类都继承H的话会出现什么问题?实际上雇员,经理,学生分别描述了一种角色,而人可以同时有不同的角色。比如一个人既然是经理就必然是雇员,而此人可能同时参加了MBA课程,从而也是一个学生,使用继承来实现角色,则只能使每一个人具有Has-A角色,而且继承是静态的,这会使得一个人在成为雇员身份后,就永远为雇员,不能称为经理或学生,这显然是不合理的。
纠正:我们应当在加一个角色类R,人通过R可以得到不同的角色。
这就是说,当一个类是另一个类的角色时,不应当使用继承来描述这种关系。
分享到:
评论

相关推荐

    合成聚合复用原则_刘邦VS韩信.pdf

    android设计模式 合成聚合复用原则_刘邦VS韩信.pdf

    java与模式

    10:合成/聚合复用原则;11:迪米特法原则;12:简单工厂模式;13:工厂方法模式;14:抽象工厂模式;15:单例模式;16:单例模式与MX记录;17:多例模式;18:序列健生成器与单例及多例模式;19:建筑模式;20:原始模型模式;21:...

    python 桥接模式(示例)

    桥接模式 Bridge:将抽象部分与他的实现部分分离,使他们都可以独立的变化合成/聚合复用原则: 尽量使用合成/聚合,尽量不要使用继承解释:什么叫抽象与他的实现分离,并不是说,让抽象类与其派生类分离,因为这就没有任何...

    SQL语句优化2

    开-闭原则(OCP):一个软件实体应当对扩展开放,对修改关闭。 ...合成/聚合复用原则(CARP):要尽量使用合成/聚合,尽量不要使用继承。 迪米特法则(LoD):一个对象应当对其他对象有尽可能少的了解

    对面向对象设计原则的总结

    对面向对象设计原则的总结,设计模式:“开-闭”原则,里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则

    合成聚合复用原则_动力节点Java学院整理

    主要介绍了合成聚合复用原则,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    面向对象的设计原则 doc

    面向对象设计根本的指导原则是提高可维护性和可复用性。这些原则主要有:1. 开闭原则;2. 依赖倒转原则;3. 里氏代换原则;4. 合成/聚合复用原则;5. 迪米特原则;6. 接口隔离原则

    java 设计模式与Jar库

    java 设计模式与Jar库 里氏代换原则LSP 依赖倒转原则DIP 接口隔离原则ISP 合成/聚合复用原则CARP

    设计模式(23种)与设计原则(6种)

    5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式(Factory) 2)抽象工厂模式(Abstract Factory) 3)建造者模式(Builder) 4)原型模式(Prototype) 5)单例模式(Singleton) 6)适配器模式...

    解析C#的扩展方法

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”...替代继承特性的方式,较多的会采用 合成/聚合复用原则,“合成/聚合复用原则”:尽量使用合成/聚

    C# 扩展方法小结

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”...替代继承特性的方式,较多的会采用 合成/聚合复用原则,“合成/聚合复用原则”:尽量使用合成/聚

    Java与模式.清晰.rar

    第10章 合成/聚合复用原则 第11章 迪米特法则 第三部分 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 专题:单例模式与MX记录 第17章 专题:多例(Multiton)模式与多语言...

    面向对象六大设计原则

    1、“开-闭”原则(Open-Closed Principle,OCP) 2、里氏替换原则(Liskov Substitution Principle,LSP...5、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP) 6、迪米特法则(Law of Demeter,LoD)

    Java模式.part3.rar

    Java语言的接口 抽象类 里氏代换原则 依赖倒转原则 接口隔离原则 合成/聚合复用原则 迪米特法则 简单的工厂 工厂的方法 抽象工程 单例(singleton) 原始模型 适配器 装饰 代理 门面模式 不变模式 策略模式 模板方法

    java_模式part2.rar

    Java语言的接口 抽象类 里氏代换原则 依赖倒转原则 接口隔离原则 合成/聚合复用原则 迪米特法则 简单的工厂 工厂的方法 抽象工程 单例(singleton) 原始模型 适配器 装饰 代理 门面模式 不变模式 策略模式 模板方法

    java_模式.part1.rar

    Java语言的接口 抽象类 里氏代换原则 依赖倒转原则 接口隔离原则 合成/聚合复用原则 迪米特法则 简单的工厂 工厂的方法 抽象工程 单例(singleton) 原始模型 适配器 装饰 代理 门面模式 不变模式 策略模式 模板方法

    设计模式,软件开发者必读

    1.5.5 合成/聚合复用原则(CARP) 9 1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 11 2.1 SINGLETON单件模式 11 2.1.1 典型的SINGLETON类 11 ...

    Java与模式(清晰书签版) 设计模式 part3

    第1章 模式的简史和形而上学 第2章 统一建模语言UML简介 ...第10章 合成、聚合复用原则 第11章 迪米特法则 第12章 简单工厂模式 第13章 工厂方法模式 第14章 抽象工厂模式 第15章 单例模式 第16章 .......

    Java 设计模式

    java的设计模式大体上分为三大类: ...6、合成复用原则(Composite Reuse Principle)  原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

    《Java设计模式(第2版)》

    1、创建型模式(5种):工厂方法模式,抽象工厂模式,...6、合成复用原则(Composite Reuse Principle) 原则是尽量使用合成/聚合的方式,而不是使用继承。继承实际上破坏了类的封装性,超类的方法可能会被子类修改。

Global site tag (gtag.js) - Google Analytics