设计模式之六大原则(一)

来源:互联网 发布:登录windows账户和密码 编辑:程序博客网 时间:2024/06/06 02:02

     在学习设计模式的过程中设计到六大原则,分别是单一职责原则、开放-封闭原则、依赖倒转原则、迪米特法则、里氏代换原则、接口隔离原则。这些原则秉承着系统易维护、易扩展、易复用、灵活多样的思想,我们学习时倘若单看原则的定义是很难理解的,只有体现在模式中结合例子才会理解的更加深刻吧。


单一职责原则(Single Responsibility Principle, SRP)

定义:就一个类而言,应该仅有一个引起它变化的原因,最简单的面向对象设计原则。

理解:单一职责原则贯穿高内聚,低耦合的指导方针,强调一个类不能撑到过多的职责,不管是模块或者方法,我们都应尽量减少此类的职责。职责过多,不仅被复用的可能性大大降低,还会耦合在一起,当某一职责变化时,可能就会削弱或抑制这个类其它职责的能力,设计就容易受到破坏。那么我们需要做的就是将各个职责分离,封装在不同的类中,使改变某一类时其它类不受或受到较小的影响、

例子:书中设计的俄罗斯方块,具备下落、旋转、碰撞、移动、堆积等不同的游戏逻辑,我们不该将其全部写入同一个form类中,form可以是游戏界面类,而前边的都是游戏逻辑,归于一个数组,构成一个游戏逻辑类,这样将两个类进行分离,互不影响,这样在操作方块状态和修改界面时就可以选择不同的类来完成。



开放-封闭原则(Open-Closed Principle, OCP)

定义:是说软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改,是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。

理解:每一个系统都不能在一开始就保持最初状态一直持续使用,而会因客户的不同需求做出相应的提高和完善,这样的话就涉及到对系统的维护。但是系统整体的框架应具备良好的稳定性和延续性。那么在设计时,坚定开闭原则,即对扩展开放,对修改关闭。为系统定义一个抽象层(这里可以是抽象接口或者抽象类),将不同的实现行为移至具体实现类中去扩展新功能。而不需再抽象层做改动,不能修改已有代码。

例子:定义一个抽象的运算类,具体类存在加法和减法两个具体实现类,如果客户需要乘法和除法,那之前的加减不得修改,只需在具体类中扩展乘除两个功能即可。



依赖倒转原则(Dependency Inversion  Principle, DIP)

定义:A:高层模块不应该依赖底层模块。两个都应该依赖抽象。

      B:抽象不应该依赖细节。细节应该依赖抽象。

      C:是面向对象设计的主要实现机制之一,是系统抽象化的具体实现。

理解:是面向接口或者抽象类编程的,在代码中传参时尽量引用高层(抽象层)的抽象类和接口进行变量申明,参数类型声明,方法返回值声明,而不是交给具体的类,这里需将具体类写入配置文件中。当系统需要修改时只需对抽象层进行扩展,对配置文件修改,但是系统源代码不需修改,与开闭原则相辅相成。

例子:pc电脑通过针脚式或触点式的接口连接主板、CPU、内存、硬盘等,这些都是针对接口设计的,它们分别属于单独个体,不至于某个硬件换了整个机子就瘫了的后果。


      设计模式这块在学习过程中很重要,师父说他们现在小组开会都还要抱着大话设计这本书呢,可见其重要性,现在初学阶段,理解甚浅,以后多加实践巩固。

0 0
原创粉丝点击