设计模式

来源:互联网 发布:商陆花软件视频教程 编辑:程序博客网 时间:2024/05/16 01:17

前几天写了几个简单的设计模式的实现, 其实在讲解各个设计模式之前我忽略了很重要的一部分,就是什么是设计模式?使用设计模式有什么好处?设计模式应该遵循哪些原则。今天我把这些补充上,为自己巩固巩固,也为那些希望能够写出更加优雅代码的人指引一点方向。


什么是设计模式?

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。

模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。即模式是在特定环境中解决问题的一种方案。

另外我们在团队的协作中,常常在一起沟通交流,在提出解决方案的时候只需要一个词,团队成员就能够快速的了解解决该问题的流程实现方法。比如说在开会的时候,技术总监提问这里应该怎么样实现最好,如果大家都懂设计模式,只需要一个词,采用外观模式。那么团队的其他成员就能够明白回答者表达的是什么。如果不懂设计模式,那么你可能一个人在那里叽啦吧啦半天大家也不明白。


为什么要使用设计模式?使用设计模式有什么好处?

设计模式是前辈们在他们的开发过程中的经验总结,是他们的经验精髓。每一个设计模式都有他适用的地方,使用了设计模式可以让你的项目结构更清晰,管理更方便。而且扩展性方面都能够得到保证,甚至在后期的维护中,我们也会比较轻松。

在软件质量中非常关心的是软件的正确性,健壮性,可靠性还有可扩展性。而开发可扩展性的软件我们必须熟练的掌握各个设计模式才行。不管之前你做的什么软件,采用什么样的方式,在实际中肯定也会用到各种各样的设计模式,也许你并没有去关注它。


设计模式应遵循哪些原则?

做什么事情都必须遵循一定的原则,国家有国家的规则,学校有学校的规则。古人云:无规矩不成方圆。这些都强调了原则的重要性。同样,在设计模式中也有起原则

1.设计模式中最重要的一个原则就是 "开-闭 原则",即对扩展开发,对修改关闭

在一个系统中,对于扩展是开放的,对于修改是关闭的,一个好的系统是在不修改源代码的情况下,可以扩展你的功能,而实现开闭原则的关键就是抽象化. 我们可以想象如果不遵循这个规则,随着新功能新需求的到来,每开发一个功能都要去修改系统的核心模块,那么这样就没法去保证软件的质量。这对测试来说也是一个非常艰巨的任务。所以开闭原则是设计模式最重要的一个原则

2.里氏代换原则:任何基类可以出现的地方,子类也可以出现。

这里的意思是,在系统中如果能够去调用基类的地方,那么也可以调用子类去实现。这样有什么好处呢?首先,子类是继承父类的,那么也就拥有的父类的所有属性和方法(不是私有的哈)。而子类又能够扩充父类的功能。通常一个系统中,父类是无法满足所有的需求的,必须通过子类去实现更多的功能。

3. 依赖倒转原则

依赖倒转原则:依赖于抽象,而非具体的实现。原则的表述如下:

1.抽象不应当依赖于细节;细节应当依赖于抽象;
2.要针对接口编程,不针对实现编程。

依赖倒转原则强调抽象的重要性,抽象约束一定的规则,所有依赖于抽象的都必须去实现这些规则。依赖倒转原则确保了系统的可扩展性。

4.组合/聚合复用原则

就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量不要使用继承。了解一下组合和聚合的概念:


组合: 组合强调的是一种强关系,一个对象必须依赖于另外一个对象。比如说,人和眼睛的关系,他们是不可分离的。

聚合:聚合的关系就没有那么紧密了,属于那种依托的关系,比如说,人和衣服的关系。人脱了衣服,衣服还可以拿给别人穿,可以是你的眼睛挖下来能拿给别人用吗(貌似现在科学这么发达,也能实现了)

软件开发强调复用的重要性,也就是不要重复去造轮子。继承一定程度上解决了复用,比如说复用了父类的方法。但是如果没有继承的关系,组合和聚合则能够更好的提供复用。

5.迪米特法则:

系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度。一个类只做自己本职工作的事,不需要去管其他类的具体实现。这样能够有效的降低类之间的耦合性。想象一下,如果类之间关系太多,牵一发而动全身,那么在后期的维护当中是非常的痛苦的。

6.接口隔离原则

接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。

以上就是设计模式需要遵循的原则,当然在并不是需要全部遵循,但是能满足的尽量满足,还是那句话,每一个设计模式都有他适用的地方,把设计模式用在最合适的地方,这才是设计模式存在的道理,记住,切勿为了设计模式而设计模式。


原创粉丝点击