# 什么叫合成与复用

现在面临这样一个场景,B类需要使用A类中的三个方法,可以有这几种方法实现。

# 第一种方法

B类继承A类,这样,B类就可以使用A类的public方法。

A+ method_1(): void+ method_2(): void+ method_3(): void
Extends
Extends
B
Viewer does not support full SVG 1.1

# 第二种方法

B类依赖A类,A类在B类中以局部变量形式存在。

A+ method_1(): void+ method_2(): void+ method_3(): voidB+ method(a:A): void

# 第三种方法

使用聚合的方式。更加深刻理解了聚合与组合的关系,以前只是知道,都是整体与部分的关系,但是组合是不可分开的,就像人和手一样不可分开,但是如何提现到代码上?同生同灭,不可分离。

A+ method_1(): void+ method_2(): void+ method_3(): voidB+ a: A+ setA(a:A): void

# 第四种方法

组合方式实现。

A+ method_1(): void+ method_2(): void+ method_3(): voidB+ a: A = new A()

# 基本内容

合成与复用的原则是尽量使用合成/聚合的方式,而不是使用继承。

# 设计原则核心思想

  • 找出应用中可能需要变化的除外,把他们独立出来,不要和那些不需要变化的代码混在一起。

  • 针对接口编程,而不是针对实现编程。

  • 需要解决对象之间的关系,松耦合。