开闭原则

定义:软件实体如(类、模块和函数)应该对扩展开发,对修改关闭 

开闭原则可以提高代码复用性,可维护性,并且符合面向对象开发的要求

理解:开闭原则视乎是一个模糊的概念,它只告诉我们对扩展开放,对修改关闭,可是到底如何才能做到对扩展开放,对修改关闭,并没有明确的告诉我们。So,我们可以将它理解为总纲,我们遵循设计模式其他原则,以及使用23种设计模式的目的就是遵循开闭原则。也就是说,只要我们对其它5项原则遵守的好了,设计出的软件自然是符合开闭原则的。

对其他原则的遵守:

对设计原则的遵守不是刻板的遵守他们,而是根据实际情况灵活运用。对他们遵守在合理的范围,就是良好的设计。

 

 

 

 

 

设计1、设计2属于良好的设计,他们对六项原则的遵守程度都在合理的范围内;设计3、设计4设计虽然有些不足,但也基本可以接受;

设计5则严重不足,对各项原则都没有很好的遵守;

设计6则遵守过渡了

设计5和设计6都是迫切需要重构的设计。

如何对其他原则的遵守:

我们以设计一个图书馆项目为例,这是一个新的项目,顾客的需求是借书,还书,图书管理员的需求是管理书籍,对用户账户管理。

单一职责原则:(主要从业务角度分析,建立业务细粒)

业务角度分析,人员分读者,管理员;

读者的行为有借书还书;

读者实体类

书籍实体类

关联表借书

关联表还书

还书又出现逾期的。。。。。。

管理员的行为有管理图书,管理用户

管理员实体类

对图书的行为有增删改查

对用户的行为有冻结解冻通知

冻结关联表。。。。。。。

接口隔离原则:(从系统架构角度分析,建立接口细化)

在业务分析完成后建立接口,以管理员对图书的管理为例;

BookManage中包含增删改查的接口;

依赖倒置原则:

核心思想是面向接口编程遵守接口隔离原则即可实现。

里氏替换原则:

核心是对继承的约束;

1.子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。

2.子类中可以增加自己特有的方法。

3.当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

迪米特原则:

其主要的目的是为了约束类与类之间的关系(依赖,关联,聚合,组合);