8 大设计原则 :
1.依赖倒置原则(DIP)
高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定);
抽象不应该依赖于实现细节(变化),实现细节应该依赖于抽象;
(依赖:编译式依赖,a 编译的时候 需要b的存在才能编译通过 就叫做 a 依赖 b)
由于在软件设计中,细节具有多变性,而抽象层则相对稳定,因此以抽象为基础搭建起来的架构要比以细节为基础搭建起来的架构要稳定得多。这里的抽象指的是接口或者抽象类,而细节是指具体的实现类。
使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。
2.开放封闭原则(OCP)
对扩展开放,对修改封闭;
开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。(扩展是继承的)
3.单一职责原则(SRP)
一个类应该仅有一个引起变化的原因;
变化的方向隐含着类的责任;
4.Liskov替换原则(LSP)也叫 里氏替换原则
子类必须能够替换他们的基类;
继承表达类型抽象;
里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
如果通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。
如果程序违背了里氏替换原则,则继承类的对象在基类出现的地方会出现运行错误。这时其修正方法是:取消原来的继承关系,重新设计它们之间的关系。
5.接口隔离原则
不应该强迫客户程序依赖他们不用的方法;
6.优先使用对象组合,而不是类继承
类继承通常为“白箱复用”,对象组合通常为“黑箱复用”;
继承在某种程度上破坏了封装性,子父类耦合度较高
7.封装变化点
使用封装来创建对象之间的分界层,让设计者能够从分界层的一侧进行修改,而不会对另一侧产生影响
8.针对接口编程,而不是针对实现编程
不将变量类型声明为某个具体类型,而是声明为某个接口;
客户程序无需知道对象的具体类型,只需要知道对象所具有的接口;
减少系统中各部分的依赖关系,从而实现高内聚,低耦合的类型设计方案;
迪米特法则
只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
设计模式:
是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来
网友评论