框架(Framework)的复用
框架的复用:浏览器→写插件
{
白
盒
框
架
:
通
过
继
承
来
扩
展
黑
盒
框
架
:
通
过
委
派
来
扩
展
\left\{ \begin{array}{c} 白盒框架:通过继承来扩展 \\ 黑盒框架:通过委派来扩展\end{array}\right.
{白盒框架:通过继承来扩展黑盒框架:通过委派来扩展
面向复用的设计模式
- Adapter(适配器模式):当新的客户端的输入或输出要求与老的方法不一致时,新建一个适配器,改变参数的样式,再委派给老的方法
- Decorator(装饰器模式):将某些功能通过委派的方式委派给同一个接口下的其他实现类
注:最后一行代码一共有4个Stack
- Facade(外观模式):当执行有固定逻辑顺序的几个方法是,通过外观模式一次性按固定的逻辑顺序调用这些方法(也可以一次性调用不同的ADT的方法)
- Strategy(策略模式):通过委派传入不同的ADT来以不同的实现方法完成目的
- Template method(模板模式):继承与重写→白盒框架
父类 a = new 子类() - Iterator(迭代器模式):JAVA已写好
可维护性的度量与构造原则
维护:纠错性、适应性、完善性、预防性
目标:easy to change(Maintainability可维护性、Extensibility可扩展性、Flexibility灵活性、Adaptability可适应性、Manageability可管理性、Supportability支持性)
OO设计原则:SOLID、GRASP
OO设计模式:
{
F
a
c
t
o
r
y
M
e
t
h
o
d
P
a
t
t
e
r
n
,
B
u
i
l
d
e
r
P
a
t
t
e
r
n
B
r
i
d
g
e
P
a
t
t
e
r
n
,
P
r
o
x
y
P
a
t
t
e
r
n
M
e
m
e
n
t
o
P
a
t
t
e
r
n
,
S
t
a
t
e
P
a
t
t
e
r
n
\left\{ \begin{array}{c} FactoryMethod Pattern, Builder Pattern \\ Bridge Pattern, Proxy Pattern\\ Memento Pattern, State Pattern \end{array}\right.
⎩⎨⎧FactoryMethodPattern,BuilderPatternBridgePattern,ProxyPatternMementoPattern,StatePattern
高内聚低耦合
信息隐藏,分离关注点
可维护性指数
SOILD原则
{ S R P 原 则 ( 单 一 责 任 原 则 ) : 一 个 方 法 只 实 现 一 个 功 能 , 不 是 多 于 一 个 1 个 的 原 因 改 代 码 O C P 原 则 ( 开 放 − 封 闭 原 则 ) : 模 块 可 扩 展 , 在 比 改 变 内 部 的 情 况 下 扩 展 L S P 原 则 ( L i s k o v 替 换 原 则 ) : 子 类 型 可 以 无 条 件 的 替 换 父 类 型 D I P 原 则 ( 依 赖 转 置 原 则 ) : 一 个 类 依 赖 于 抽 象 类 而 不 是 具 体 的 类 I S P 原 则 ( 接 口 聚 合 原 则 ) : 将 大 的 接 口 拆 分 成 小 的 接 口 ( 类 从 实 现 一 个 变 成 实 现 多 个 ) \left\{ \begin{array}{c} SRP原则(单一责任原则): 一个方法只实现一个功能,不是多于一个1个的原因改代码\\ OCP原则(开放-封闭原则): 模块可扩展,在比改变内部的情况下扩展\\ LSP原则(Liskov替换原则):子类型可以无条件的替换父类型\\ DIP原则(依赖转置原则):一个类依赖于抽象类而不是具体的类\\ ISP原则(接口聚合原则): 将大的接口拆分成小的接口(类从实现一个变成实现多个)\end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧SRP原则(单一责任原则):一个方法只实现一个功能,不是多于一个1个的原因改代码OCP原则(开放−封闭原则):模块可扩展,在比改变内部的情况下扩展LSP原则(Liskov替换原则):子类型可以无条件的替换父类型DIP原则(依赖转置原则):一个类依赖于抽象类而不是具体的类ISP原则(接口聚合原则):将大的接口拆分成小的接口(类从实现一个变成实现多个)