博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象设计模式系列文章之---NO.1
阅读量:5302 次
发布时间:2019-06-14

本文共 2410 字,大约阅读时间需要 8 分钟。

大学学习的是计算机科学技术专业。 但是真正从事软件方面的工作也不过是近一年的事情。前两年有点不务正业了哈。

在读大学时期就想着认证学习设计模式的,但是那时候读了是似是而非 ,一头的雾水,想着生硬的啃着那本GOF的经典模式,最终无功而返,收获不大。最近想着卷土重来,并写一系列的文章,全当做是学习笔记了

(在文章中,很多东西都是看到别人的东西搬过来的,非常感谢原作者的辛劳与智慧)

本系列文章初步规划  共有24篇分别讲解GOF的23设计模式。开篇为总论,讲解设计模式的遵循的一些基本的原则。

  面向对象的一些基本的原则

  • SRP----单一职责原则
  • OCP----开放封闭原则
  • LSP----里氏替换原则
  • DIP----依赖倒置原则
  • ISP-----接口隔离原则

 下面我就分别做一些介绍。

     SRP(single responsibility principle)

The single responsibility principle states that every object should have a single responsibility,and that responsibility should be entirely encapsulated by the class.All its services should be narrowly aligned with that responsibility.

 单一职责原则 其实质就是要求每个类应该只能有一原因引起它的变化。为什么要有单一职责原则呢?

  我们来假设有那么一个类有很多个功能。访问数据库可以找他,访问注册表可以用它,网络通信可以找他。那客户程序可就幸福了,因为需要什么都可以找他完成。

如果存在这么一个类,他能是稳定的吗?几乎不可能稳定。影响他的因素太多了,因此他可能常常要被修改,变的很不稳定。

  ps:在这里考虑一下,如果一个类经常被修改。。。鬼知道他会不会对调用这个类的其他客户程序造成什么样影响。  实际项目中要把握好单一职责中单一的度。太过单一的话,违背了面向对象设计中的封装原则。过犹不及。

    LSP and DIP

LSP-----Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.

DIP-----The principle states:

            A.High-level modules should not depend on low-level modules.Both should depend on abstractions

            B.Abstractions should not depend upon details.Details should be depend upon abstractions.

在里氏替换原则和依赖倒置原则中,接口代表抽象的内容,子类相对具体,而且子类更倾向于发生变化,各类设计模式都在贯彻这两个原则,务求是客户程序依赖于抽象而非具体。

乍一看这两个原则很相似,他们有什么区别呢?

关键在于这两个原则站的角度不同。其中里氏替换 原则更多的是站在模式对象这一方,而依赖倒置原则更多的是站在客户程序这一方。模式对象这一方将相对多变的子类视同它的接口(或父类),而客户程序依赖的内容不是“相对多变的”子类,而是相对稳定的接口。

ISP

  ISP----No Client should be forced to depend on methods it does not use.

      接口隔离原则要求客户程序无须被迫依赖于他用不到的方法

软件设计是一个耗时的工作,但实际项目中我们常常会因为深思熟虑过头而在某些接口上画蛇添足,这样的接口被称为“Fat Interface”==肥胖臃肿超标 的接口。

PS:很多情况下接口隔离原则与前面的单一职责原则是相辅相成的,如果每个接口只定义“单一职责”,一般不容易出现Fat Interface,而且冗余比较少。但是单一职责原则并不保证客户程序只知道必要的,甚至有些情况下接口隔离原则与单一职责原则会出现一定程度上的冲突。设计时候需要根据用户界面、性能等因素权衡。

LoD:Law of Demeter、LKP

  LoD/LKP-------

  A.Each unit should have only limited knowledge about other units:only units "closely" related to the current unit.

     B.Each unit should only talk to its friends;don't talk to strangers.

     C.Only talk to your immediate friends

 只和你的密友交谈。迪米特法则还有另外两层意思,就是调用者对于目标对象的知识最少,而且不和陌生人交谈。

OCP

           OCP---Closed for Modification;Open for Extension.

开闭原则可以说是前面一系列原则的集大成者,内容更加高屋建瓴。

面向对象设计已经发生并将继续发生各种原则,除了熟悉他们外,更重要的是谨记他们的只是思路而且只是技术层面的思路,我们开发软件的主要目的是满足用户的需要,同时获得收益。因此面向对象原则还要和团队的承受能力,投入。时间进度等结合起来考虑。设计原则要活用!

 

 

转载于:https://www.cnblogs.com/qinyanqing/archive/2013/01/03/2843210.html

你可能感兴趣的文章
React Native在Android平台运行gif的解决方法转载
查看>>
Mybatis RowBounds 是逻辑分页
查看>>
hdu 3341(ac自动机+状态压缩)
查看>>
51单片机之蓝牙遥控小车_效果展示+单片机知识+完整蓝牙电车代码
查看>>
使用WNMP时报的错
查看>>
扩展Django内置的auth模块代码示例
查看>>
Sql Server中REPLACE函数的使用
查看>>
SqlServerl的行转列
查看>>
《信息安全系统设计基础》第三周问题总结
查看>>
nextInt()和nextLine()一起使用时的注意点
查看>>
java如何获取一个对象的大小【转】
查看>>
MobilePhone正则表达式
查看>>
2017年3月17日上午日志
查看>>
JavaScript跨域总结与解决办法
查看>>
Hover功能
查看>>
[LeetCode] Jump Game II
查看>>
吉布斯现象
查看>>
Learning to Rank入门小结 + 漫谈
查看>>
关于人工智能的期刊影响因子
查看>>
js千分位处理
查看>>