当程序员说到“设计模式”的时候,是不是觉得一头雾水,什么是设计模式?很多人应该都听说过设计模式(Designpattern),也或多或少的见过或使用过设计模式,但是在开发过程中实际使用总觉得力有不逮。那肯定是对设计模式的理解有点偏差或者不够深入。先不说具体的模式,先来看看什么是设计模式?什么是设计模式?设计模式是代码设计中的一套“经验总结”。在项目中“合理”使用设计模式,可以“巧妙地解决很多问题”。经验总结:抱着“代码虐我千百次,我对待代码如初恋”的心态,终于搞出了“套路”。合理:对设计模式的使用场景有一定了解后使用,“不要滥用”。比如:要输出一句“helloworld”,就需要强行加上各种模式。问:“为什么”,答:“我总觉得缺少模式!”。巧妙解决了诸多问题:之所以被广泛使用。为什么提倡“设计模式”?根本原因是重用代码,增加可维护性。那么代码重用如何才能实现呢?设计模式六大原则(OpenClosePrinciple)1988年,Brandt·BertrandMeyer提出了开闭原则他的书《面向对象软件构造(Object Oriented Software Construction)》。原文是这样的:“Softwareentitiesshouldbeopenforextension,butclosedformodification”。意思是:软件模块应该对扩展开放,对修改关闭。例如:当程序需要增加新功能,不能修改原有代码,但增加代码,达到热插拔的效果(热插拔:灵活移除或增加功能,不影响原有功能)。目的:使程序更可扩展,易于维护和升级里氏代换原则(LiskovSubstitutionPrinciple)含义:里氏代换原则是继承和重用的基石,只有派生类才能替代基类,一个基类只有在软件单元的功能不受影响的情况下才能被复用,派生类也可以在基类的基础上增加新的行为。例如:球本来是一种体育用品,其派生类包括篮球、足球、排球、羽毛球等,如果派生类替换基类原有的方法,比如改变体育用品单位的功能是affected),这不符合Liskov替换原则。目的:规定实现抽象的具体步骤。依赖倒置原则(DependenceInversionPrinciple)的意思是:为接口编程,而不是为实现编程。例子:以计算机系统为例,主板、CPU、内存、硬件都是为接口而设计的。如果设计实现的话,内存必须对应某个品牌的主板。也换来了尴尬。目的:降低模块之间的耦合度。接口隔离原则(InterfaceSegregationPrinciple)使用多个隔离的接口优于使用单个接口。举个例子:比如:登录和注册属于用户模块的两个接口,比写一个接口要好。目的:提高程序设计的灵活性。得墨忒耳原理(DemeterPrinciple)由美国东北大学的IanHolland于1987年秋天提出,并被UML的先驱之一[Booch]推广。后来因为经典作品《 The Pragmatic Programmer》而家喻户晓。含义:一个实体应尽可能少地与其他实体交互,使系统的功能模块相对独立。例如:一个类公开的公共属性或方法越多,涉及修改的范围就越大,变更带来的风险扩散就越大。目的:降低类之间的耦合度,减少对其他类的依赖。单一职责原则(Singleresponsibilityprinciple)这个原则是罗伯特·C·马丁(RobertC.Martin)在《敏捷软件开发:原则、模式和实践》一书中给出的。Martin表示,该原则是根据TomDeMarco和Meil??irPage-Jones的著作中的内聚原则制定的。含义:一个类只负责一个功能区内相应的职责,或者可以定义为:就一个类而言,它的变化应该只有一个原因。示例:这个原理的含义很简单,不需要示例!目的:降低类的复杂度,提高可读性,提高可维护性。刚入行的时候,我在想什么样的代码才是好代码?看到很多前辈说好的代码应该符合“高内聚,低耦合”,但是听到这样的解释,是这样的,现在学习了一定程度的设计模式,感觉自己懂了一点点,朋友,你学会了吗?高内聚,低耦合?内聚性是从功能的角度衡量模块内部的关系。一个好的内聚模块应该只做一件事。它描述了模块内的功能关系;耦合是软件结构中模块之间相互联系的度量,耦合的强弱取决于模块之间接口的复杂程度、模块的入口或访问点以及通过接口的数据。
