# 软件设计原则


## 糟糕的设计
### 僵化性
软件代码之间耦合严重,难以改动,任何微小的改动都会引起更大范围的改动。

### 脆弱性
微小的改动容易引起莫名其妙的崩溃或者 bug,出现 bug 的地方看似与改动的地方毫无关联,或者软件进行了一个看似简单的改动,重新启动,然后就莫名其妙地崩溃了。

### 牢固性
软件无法进行快速、有效地拆分。

### 粘滞性

### 晦涩性

## 开闭原则
软件实体(模块、类、函数等等)应该对扩展是开放的,对修改是关闭的。

对扩展是开放的,意味着软件实体的行为是可扩展的,当需求变更的时候,可以对模块进行扩展,使其满足需求变更的要求。

对修改是关闭的,意味着当对软件实体进行扩展的时候,不需要改动当前的软件实体;不需要修改代码;对于已经完成的类文件不需要重新编辑;对于已经编译打包好的模块,不需要再重新编译。

### 一个违反开闭原则的例子
当我们在代码中看到 else 或者 switch/case 关键字的时候,基本可以判断违反开闭原则了。

### 使用策略模式实现开闭原则
策略模式是一种行为模式,多个策略实现同一个策略接口

### 使用适配器模式实现开闭原则

### 使用观察者模式实现开闭原则
观察者模式是一种行为模式,解决一对多的对象依赖关系,将被观察者对象的行为通知到多个观察者,也就是监听者对象。

### 使用模板方法模式实现开闭原则



