23种设计模式之6大原则
来源:互联网 发布:vmware 14 安装mac os 编辑:程序博客网 时间:2024/05/13 23:28
一、单一职责原则
如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,当变化发生时,设计会遭受到意想不到的破坏。事实上,我们完全可以找出来进行分类,分离。
软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。其实要去判断是否应该分离出类来,也不难,那就是如果你能够想到多余一个的动机去改变一个类,那么这个类就具有多余一个的职责,就应该考虑类的职责分离。
优点:降低类的复杂性;提高类的可读性;提高代码的可维护性和复用性;降低因变更引起的风险。
二、开放-封闭原则
这个原则其实是有两个特征,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。
无论模块是多么封闭,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。这就是开放-封闭原则的精神所在。
开放封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该对程序中呈现出频繁变化的那些部分做出抽象,然后,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。
重要性体现:提高复用性;提高维护性;提高灵活性;易于测试。
三、依赖倒转原则
说白了,就是要针对接口编程,不要对实现编程。举个例子,无论电脑的主板、CPU、内存、硬盘都是在针对接口设计的,如果针对实现来设计,内存就要对应到具体的某个品牌的主板,那就会出现换内存需要把主板也换了的尴尬。
所以说,PC电脑硬件的发展,和面向对象思想发展是完全类似的。这也说明世间万物都是遵循牟宗类似的规律,谁先把握了这些规律,谁就最早成为了强者。
依赖倒转原则其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计了。
四、里氏代换原则
只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
比方说,猫是继承动物类的,以动物的身份拥有吃喝跑叫等行为,可当某一天,我们需要够牛羊也拥有类似的行为,由于它们都是继承动物,所以除了更改实例化的地方,程序其他处不需要更改。
正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展,才使得开放--封闭的原则成为了可能。
优点:代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;提高代码的可重用性;缺点:1.继承是入侵式的。只要继承,就必须拥有父类所有属性和方法。
2.降低代码的灵活性。子类必须拥有父类的属性和方法,使子类受到限制。
3.增强了耦合性。当父类的常量、变量和方法修改时,必须考虑子类的修改,这种
五、迪米特原则
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。
迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。
迪米特法则其根本思想,是强调了类之间的松耦合。在程序设计时,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。也就是说,信息的隐藏促进了软件的复用。
简言描述就是:只与你直接的朋友们通信;不要跟“陌生人”说话;每一个软件单位
对其他的单位都只有最少的了解,这些了解仅局限于那些与本单位密切相关的软件单位。
对迪米特法则进行模式设计有两个:外观模式、中介者模式
六、接口隔离原则
1.
一个类对另外一个类的依赖性应当是建立在最小的接口上的
2.
一个接口代表一个角色,不应当将不同的角色交给一个接口。
3.
不应该强迫客户使用它们的不同方法。
如图所示的电子商务系统在三个地方会使用到订单类:一个是门户,只能有查询方法;一
个是外部系统,
有添加订单的方法;
一个是管理后台,
添加、
删除、
修改、
查询都要用到。
“原子”在实践中的衡量规则:
1.
一个接口只对一个子模块或者业务逻辑进行分类。
2.
只保留接口中业务逻辑需要的
public
方法。
3.
尽量修改污染了的接口,若修改的风险较大,则可采用适配器模式进行转化处理。
4.
接口设计应因项目而异,因环境而异,不能照搬教条。
1. 一个接口只对一个子模块或者业务逻辑进行分类。
3. 尽量修改污染了的接口,若修改的风险较大,则可采用适配器模式进行转化处理。
- 23种设计模式之6大原则
- 设计模式之6大设计原则
- 设计模式之6大设计原则
- 设计模式之6大设计原则
- 6大原则23种设计模式
- 设计模式之6大原则
- 设计模式之6大原则总结
- 设计模式之6大原则
- 设计模式之6大原则
- 设计模式之6大原则
- 设计模式之6大原则
- 设计模式之大原则
- 设计模式之6大原则(6)开闭原则
- 设计模式6大原则之-单一职责原则
- 设计模式6大原则之里氏替换原则
- 设计模式6大原则之依赖倒置原则
- 设计模式6大原则之接口隔离原则
- 设计模式之6大原则(1)-单一职责原则
- 查看静态库(.lib)和动态库(.dll)的导出函数的信息
- bigshop(ECShop_V2.7.3_UTF8_release1106)代码解析
- /opt/tinyos-2.1.2/tos/lib/tossim/tossim_wrap.cxx: In function ‘void SWIG_Python_AddErrorMsg(const ch
- Git之修改commit
- spring boot devtools
- 23种设计模式之6大原则
- material与sharedMaterial的区别
- 1、Python初学
- 呼叫中心能为企业带来多少益处
- 5、原型模式(Prototype)
- WebView实现Android与H5互调
- Android系统Java层访问Native层函数
- poj 2503 map容器
- JQuery EasyUI datagrid 复杂表头处理