在很多时候我们学习一个东西,我觉得只有在知道他的应用场景才能很好的了解它,也能够更好的激发起对他的学习兴趣。因此,在我们学习设计模式的时候,我觉得在深入了解设计模式之前了解设计模式的几个原则能够加速我们对于设计模式的理解和学习。下面,我们就开始学习设计模式的六大原则。
1、单一职责原则
定义:一个类应该只负责一个功能。
例子:如果我们要写一个计算器,我们应该把输入、计算、输出都给分离出来,让每一个类来负责一个功能,这样如果我们在编写了加法之后需要使用减法的时候只需要修改计算类,而其他的类是完全可以复用的。
2、里氏代换原则
定义:只要在父类出现的地方子类就一定可以出现,而且替换为其他子类也不会出现错误,使用者不需要关心使用的是子类还是父类。但是在子类出现的地方不一定能使用父类。
要求:
- 子类必须实现父类的抽象方法,但是不能重写(覆盖)父类的非抽象(已实现)方法。
- 子类中可以添加父类中不存在的方法,在这种情况下无法在父类定义的对象中使用该方法,但是可以将基类强转为子类后进行调用。
- 当子类覆盖或者实现父类方法时,方法的参数应该要比父类更加宽松。例子:父类中的方法参数为HashMap类,子类可以使用Map类,反之不行。
- 当子类实现父类的抽象方法时,方法的返回值要比父类更加严格。
3、依赖倒置原则
定义:
- 高层模块不应该依赖低层模块,两者都应该依赖其抽象
- 抽象不应该依赖细节
- 细节应该依赖抽象
要求: - 每个类都应该有接口或者抽象列,或者两者都有
- 变量的表面类型应该尽量是接口或者抽象类
- 任何类都不应该从具体类派生
- 尽量不要覆写基类的方法
- 接口负责定义public书香和方法,并且声明和其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑。
4、接口隔离原则
定义:
- 使用多个专用的接口,而不是使用单一的总接口,即客户端不应该依赖那些它不需要的接口
- 类之间的依赖关系应该建立在最小接口上
要求:
每个接口都应该只承担一种相对独立的角色,不干不该干的事情
例子:
如果我们定义一个动物接口,那么就应该之定义一个吃和运动这样的基本接口,而不应该定义思考这样的接口。
5、迪米特法则
定义:一个对象应该对其他对象有最少的了解。一个类的细节应该全部写在这个类的内部,不要让其他类知道。降低模块之间的耦合。
6、开闭原则
定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭,开闭原则是其他原则的基石。
网友评论