对象的结构模式!又称之为柄体模式、接口模式。
用意
将抽象化与实现化脱耦,使得二者可以独立地变化。
即 在系统中将抽象化和实现化之间使用组合/聚合关系而不是使用继承关系,从而使得两者可以相对独立的变化!
即 聚合优先,继承次之!
概念解释
抽象化
存在于多个实体中的共同的概念性联系,就是抽象化。
实现化
抽象化给出的具体实现,就是实现化。
脱耦
即脱离耦合,去除强关联的意思。
强关联
在编译时期已经确定的,无法在运行时期动态改变的关联:继承
弱关联
可以动态地指定且可以在运行时期动态地改变的关联:聚合
适用场景
- 应用存在两个非常强的变化维度
- 两个变化维度各自抽象,再具体实现
- 利用一个xxxManager将两个变化维度的抽象进行关联,实现互相组合
实现案例
- JDBC驱动器
应用程序在变化
DB驱动在变化
使用driverManager将驱动与应用程序关联起来,而应用程序和驱动可以独立变化。
2. 商场卖产品
产品要变化:糖果、衣服、鞋子
工厂也变化:家乐福、沃尔玛、麦德龙
使用一个companyManager将工厂与产品关联起来,实现不同的工厂售卖不同的产品