设计模式的五大原则

1、单一职责

  不论是在设计类,接口还是方法,单一职责都会处处体现,单一职责的定义:我们把职责定义为系统变化的原因。所有在定 义类,接口,方法的时候。定义完以后再去想一想是不能多于一个的动机去改变这个类,接口,方法。如果答案是肯定的,说明定义的类,接口,方法则多于一个职 责。故违背单一职责,遇到这种情况应该重新细分职责,直到不会出现多种职责的类,接口方法为止(发现职责,并把那些职责相互分离)。单一职责的为最简单的 五种原则之一。在软件设计的过程中处处体现。无处不在。

2、开闭原则

  开闭原则是指类、模块、方法是可以扩展的,但不可以 修改。开即对扩张开放,闭即对修改关闭。开闭原则的应用体现在,开发人员应该仅仅对程序中频繁出现变化的地方进行抽象(封装变化点)。对变化点的封装即对 变化的修改关闭。对于变化的不确定性,可随时扩展。即 继承的使用。抽象类的运用。

3、替换原则(Is-A)

  替换原则即是总是保证子类可以替换它的基类。

   替换原则的实现。对于一组具有类似属性,方法,变量的类。我们可以提取公共属性,方法,变量做为一个基类(抽象类或者类),使这一组类继承基类,重写虚 方法。现在这些继承的类和基类的关系符合Is-A。如基类为鸟,则继承类可以为麻雀,燕子。我们可以说麻雀Is-A鸟,燕子Is-A鸟。

  在项目中所有使用子类的地方都可用父类替换,但在调用方法的时候 ,即呈现面向对象编程的多态性。即替换原则,非常重要的原则,也是比较对难的原则。

4、依赖倒置原则

  a、高层模块不应该依赖于低层模块。二者都应该依赖于抽象
  b、抽象不应该依赖于细节。细节应该依赖于抽象。

在面向过程的开发语言中分析和设计,总是创建一些高层模块去调用低层模块、策略依赖于细节的软件结构。实际上这种方法的目的就是要定义子程序层次结构,该 结构 描述了高层模块怎样调用低层模块。而设计良好的面向对象的程序,正好“倒置”了这种依赖关系。高层模块不再依赖于低层模块,从而低层模块的修改不会影响到 高层模块,并且高层模块也是能非常容易的被重用,高层模块和低层模块都影响都依赖于抽象。这样也非常符合强内聚松耦合的编程思想。故该原则也是框架设计的 核心原则。
      使用传统的过程化程序设计所创建出来的依赖关系结构,策略是依赖于细节的,这是糟糕的,因为这样会使策略受到细节改变的影响,面向对象的程序设计倒置了依赖关系结构,全程细节和策略都依赖抽象,并且常常是客户程序拥有服务接口。
      事实上,这种依赖关系的倒置正是好的面向对象设计 的标志所在,使用何种语言来编写程序是无关紧要的。如果程序的依赖关系是倒置的,它就是面向对象的设计。如果程序的依赖关系不是倒置的,它就是过程化的设计。
      依赖倒置原则是实现许多面向对象技术所宣称的好处的基本低层机制。它的正确应用对于创建可重用的框架来说是必需的。同时它对于构建在变化面前富有弹性的代码也是非常重要的,由于抽象和细节彼此隔离,所以代码也非常容易维护。

5、接口隔离原则

应该说该原则是处理现有“胖”接口所存在的缺点。如果类的接口不是内聚的,就表示该类具有“胖”接口。换句话说“胖”接口可以分解成多组方法。每一组方法 都服务于一组不同的客户程序。这样,量引客户程序可以使用一组成员函数,而其他客户程序可以使用其他组的成员函数。

接口隔离的方法有两种(分享客户就是分离接口):

1、使用委托(此委托非.net委托[delegate])分离接口

       使用委托即,创建一个委托类,用此类去实现分离后的其它接口中的方法。

2、使用多重继承分离接口、

        此方法,即将现有“胖”接口分成供不同客户程序调用的两个或多个接口,而需要实现多个接口的客户程序,则使用多重继承来实现。

    这两种方法是实现接口隔离的全部方法,其中第二种方法使用较普遍,也比较简单。而第一种方法使用起来相对比较复杂,而且在使用委托的过程中也会产生重 复的对象,则占用运行时间和内存开销。有的时候第二种方法是必须的,第一种方法是不能使用的。如:利用委托对象所做的转换是必需的,或者不同的时候会需要 不同的转换。

时间: 2024-12-28 20:52:37

设计模式的五大原则的相关文章

【设计模式】 五大原则

一. 单一职责 (单个类,接口,方法只有一个功能) 应用 : 代码设计规范 1. 类的设计 对应一个功能模块 2. 方法的设计 对应一个功能, 代码行不应超过10行 二. 开闭原则 (可以扩展,不能修改) 应用 代码严谨 1. 方法完成后, 需要经过完整的测试, 尽量以后修改时,无需对已写好的代码修改,而是添加新的方法,对现有的方法进行补足 三. 替换原则 (用父类替换子类,注意父类需要包含所有子类方法,属性,否则子类独有方法无法调用) 应用 代码设计方案 1. 面向对象来设计, 尽量使用接口和

设计模式之SOLID原则再回首

    本科阶段学过设计模式,那时对设计模式的五大原则--SOLID原则的概念与理解还是比较模糊,此时过去了2年时间,在学习<高级软件工程>课程中老师又提到了设计模式,课程中还详细讨论了五大原则的过程,这次SOLID原则再回首作者提出了一些更通俗的理解吧~ 一. 什么是设计模式?     那么,什么是设计模式呢? 从广义角度讲设计模式是可解决一类软件问题并能重复使用的设计方案; 从狭义角度讲设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,是在类和对象的层次描述的可重复

面向对象 抽象类、接口、类库、五大原则

抽象类 抽象类,只为继承而出现,不定义具体的内容,只规定该有哪些东西一般抽象类中只放置抽象方法,只规定了返回类型和参数比如: 人    - 有吃饭,睡觉方法 男人 - 继承人抽象类,必须实现吃饭,睡觉的方法主体 女人 - 继承人抽象类,必须实现吃饭,睡觉方法的主体 抽象类中可以有普通属性,通过子类来使用 1.关键字:abstract2.抽象类可以包含抽象方法和普通方法3.abstract关键字可以定义方法为抽象方法,抽象方法可以没有函数体4.抽象类无法被实例化,抽象类主要做为一个基类,让别的类继

深入理解JavaScript系列(21):SOLID五大原则之接口隔离原则ISP(转载)

深入理解JavaScript系列(21):SOLID五大原则之接口隔离原则ISP 前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle). 英文原文:http://freshbrewedcode.com/derekgreer/2012/01/08/solid-javascript-the-interface-segregation-principle/注:这篇文章作者写得

OO的五大原则是指SRP、OCP、LSP、DIP、ISP。

OO的高层原则,面向对象设计的基本原则 设计模式之六大原则--开闭原则(OCP) 设计模式之六大原则--迪米特法则(LoD,LKP) 设计模式之六大原则--接口隔离原则(ISP) 设计模式之六大原则--依赖倒置原则(DIP) 设计模式之六大原则--里氏替换原则(LSP) 设计模式之六大原则--单一职责原则(SRP) OO的五大原则是指SRP.OCP.LSP.DIP.ISP. 开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活

设计模式--6大原则--开闭原则

开闭原则(Open Closed Principle) 开闭原则的核心是:对扩展开放,对修改关闭 白话意思就是我们改变一个软件时(比如扩展其他功能),应该通过扩展的方式来达到软件的改变,而不应爱修改原有代码来实现变化 开闭原则算是前5中原则的一个抽象总结,前五种是开闭原则的一些具体实现,所以如果使用开闭原则,其实有点虚,因为它没有一个固定的模式,但是最终保证的是提高程序的复用性.可维护性等要求 要使用这一原则还需要结合着它的思想"对扩展开放,对修改关闭"与其他的五大设计原则根据经验来开

深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP

前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle). 英文原文:http://freshbrewedcode.com/derekgreer/2012/01/08/solid-javascript-the-interface-segregation-principle/ 注:这篇文章作者写得比较绕口,所以大叔理解得也比较郁闷,凑合着看吧,别深陷进去了 接口隔离原则的描述

面向对象(五大原则)

面向对象的五大原则 单一职责原则SRP(Single Responsibility Principle) 是指一个类的功能要单一,不能包罗万象.如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌的,但效率却高不起来.   开放封闭原则OCP(Open-Close Principle) 一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的.比如:一个网络模块,原来只服务端功能,而现在要加入客户端功能, 那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求

设计模式之SOLID原则

设计模式中的SOLID原则,分别是单一原则.开闭原则.里氏替换原则.接口隔离原则.依赖倒置原则.前辈们总结出来的,遵循五大原则可以使程序解决紧耦合,更加健壮. 单一责任原则 指的是一个类或者一个方法只做一件事.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化就可能抑制或者削弱这个类完成其他职责的能力.例如餐厅服务员负责把订单给厨师去做,而不是服务员又要订单又要炒菜. 开放封闭原则 对扩展开放,对修改关闭.意为一个类独立之后就不应该去修改它,而是以扩展的方式适应新需求.例如一开