`
Moyunyu
  • 浏览: 14853 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

设计模式之面向对象设计原则

阅读更多

    最近在学习设计模式的相关知识, 本想上来就先分析几个设计模式练练手, 但最后还是觉得来点虚的, 说一下面向对象分析与设计的一些原则, 那么设计原则和设计模式之间到底是什么关系呢, 说简单一点, 就是: 设计模式是设计原则的一些具体体现. 复杂一点说, 就是: 设计原则是思想上的指导, 而设计模式是实现上的手段. 形象一点说, 设计原则是不是就相当于接口, 而设计模式就是一个一个的实现类, 每个实现类可以实现一个或多个接口. 这是不是有一个缺点, 就是必须全盘接受接口中的抽象方法, 如果一个接口中的方法与另一个接口中的方法是相悖的, 那么是不是我们只能选择一个, 这一点说明了什么呢: 设计模式只是一个指导, 在实际应用的时候我们很难去完全遵守, 总会有意无意的违反一些设计原则或者是部分的设计原则, 有句话说的很好:"设计是一种危险的平衡艺术". 好了, 不说废话了, 下面介绍一下, 比较常见的面向对象设计原则: 

    1. 单一职责原则(Single Pesponsibility Principle)

标准解释: 一个类应该仅有一个引起它变化的原因. 

我的理解: 一个类如果有多个引起它变化的原因(方法), 那么方法是不是有可能耦合在一起, 如果更改了其中一个方法, 那么势必会影响到其他方法的实现.这样的设计是不是就很脆弱, 这就是所谓的单一职责原则.

    2. 开放-封闭原则(Open-Closed Principle)

标准解释: 一个类应该对扩展开放, 对修改关闭

我的理解: 类的行为(方法)是可以扩展的, 但是必须是在不修改已有代码的情况下进行拓展. 这听起来是不是有点矛盾, 怎么才能实现呢, 其实很简单, API里面实现好了很多的类, 想一想他是不是就是体现了这一个原则(貌似我以前动过修改源代码的想法, 后来发现源代码是只读的).

    3. 里氏替换原则(Liskov Substitution Principle)

标准解释: 子类型必须能够替换掉他们的父类类型

我的理解: 里氏替换貌似是实现开放-封闭原则的重要依据, 开闭原则要求对扩展开放, 实现扩展的手段是什么? 不就是使用继承么, 那么里氏替换原则是不是就保证了子类型可以正确的替换父类型, 为什么要这么说呢? 因为只有正确的替换, 才能实现扩展, 否则即使拓展了也会出错.

    4. 依赖倒置原则(Dependence Inversion Principle)

标准解释: 要依赖抽象, 不要依赖具体类, 要做到依赖倒置应该做到:高层模块不应该依赖底层模块, 二者都应该依赖于抽象; 抽象不应该依赖于具体实现, 具体实现应该依赖于抽象.

我的理解: 依赖倒置简单一点说就是化主动为被动, 也就是不主动去分配资源创建对象, 而是让别人替自己做这些工作.

    5. 接口隔离原则(Interface Segregation Principle)

标准解释: 不应该墙壁客户依赖于他们不用的方法

我的理解: 按照不同客户的需要分离成为针对客户需求的接口, 这些接口中只包含客户需要的操作声明, 这样既方便了客户使用, 又能防止因客户误用接口而导致的错误.

    6. 最少知识原则(Least Knowledge Principle)

标准解释: 只和你的朋友谈话

我的理解: 减少对象之间的交互, 对象只和自己的朋友交互, 以达到减少类之间耦合的效果. 这样在修改某一个部分的时候, 就不会影响其他部分, 使系统更加有利于维护.

    还有一些其他的原则, 就一一分析了, 接下来, 也该正式进入设计模式了.

1
0
分享到:
评论

相关推荐

    23种 设计模式---面向对象的基本原则

    在面向对象编程中,设计模式基于一些基本原则,这些原则构成了良好设计的基础。本篇将深入探讨23种设计模式以及面向对象的基本原则。 面向对象的基本原则主要包括: 1. 单一职责原则(Single Responsibility ...

    漫谈设计模式-从面向对象开始

    在本文档中,我们将深入探讨设计模式及其在面向对象编程中的应用。设计模式是软件工程中的一套被广泛认可的最佳实践,它们是一些在特定上下文中反复出现的问题的解决方案。了解和应用设计模式可以帮助开发者写出更加...

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    首先,我们需要理解面向对象设计的基本原则,这些原则是设计模式的基础。它们包括: 1. 单一职责原则(SRP):一个类或模块应只有一个改变的原因。这有助于保持代码的模块化,降低耦合度。 2. 开放封闭原则(OCP)...

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则.zip

    C#作为一种流行的面向对象编程语言,在设计模式的实现上表现出色,而本书《C#面向对象设计模式纵横谈(1):面向对象设计模式与原则.zip》则深刻揭示了如何将这些模式与原则贯彻于C#代码之中。 首先,让我们从设计...

    面向对象设计模式设计原则

    本文将深入探讨面向对象设计中的核心原则,并通过具体示例来阐述这些原则的实际应用。 ### 一、开闭原则(Open/Closed Principle) 开闭原则由Bertrand Meyer提出,其核心思想可以概括为:“软件实体应当对扩展...

    设计模式可复用面向对象软件的基础(C++)——强烈推荐

    总结来说,这本书是面向C++程序员的一份宝贵资源,它深入探讨了设计模式的理论与实践,通过具体的案例分析,帮助读者掌握面向对象设计的核心原则。无论是初学者还是经验丰富的开发者,都可以从中受益,提升自己的...

    面向对象程序设计原则与模式

    面向对象程序设计原则与模式 面向对象程序设计原则是软件设计中的一种重要方法,它强调通过封装、继承和多态来实现软件的可维护性、可扩展性和可重用性。设计模式是指在软件设计中常见的、可以重复使用的解决方案,...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则 C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) C#面向对象设计...

    几种设计模式和面向对象原则

    设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结...单例模式作为创建型模式的一种,是理解和掌握面向对象设计的一个重要环节。通过学习和运用这些模式,我们可以更好地应对复杂软件系统的挑战。

    C#设计模式-面向对象设计原则

    C#设计模式-面向对象设计原则,C#设计模式-面向对象设计原则

    面向对象设计原则和设计模式的概念

    面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...

    设计模式:可复用面向对象软件的基础.zip

    通过学习和掌握这些设计模式,开发者可以更好地理解和应用面向对象的设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。这些原则和模式的结合,可以帮助我们构建出更加模块化、可扩展...

    跟媳妇解释设计模式与面向对象

    在面向对象编程中,SOLID原则是非常重要的,它是一组面向对象设计原则的首字母缩写,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。遵循这些原则,可以使程序更加健壮、易于维护和扩展。 ...

    C#面向对象设计模式与原则

    通过学习这些设计模式,开发者可以更好地理解和应用面向对象设计的原则,写出更优雅、更具扩展性的代码。C#的特性,如接口、抽象类、泛型、委托和事件等,都为实现这些模式提供了强大支持。在实际项目中,合理运用...

    面向对象设计原则与设计模式

    面向对象设计原则与设计模式是软件工程中至关重要的概念,它们是构建可维护、可扩展、高复用性代码的基础。下面将详细阐述这些原则和模式,并结合PPT文件名称"设计原则.ppt"来推测可能包含的内容。 一、面向对象...

    设计模式01-面向对象七大原则

    设计模式面向对象七大原则

    C++设计模式课件2_面向对象设计原则.pdf

    ### C++设计模式课件2_面向对象设计原则 #### 面向对象设计原则概述 面向对象设计原则是软件工程领域中为了提高代码质量、增强软件系统的可维护性和可扩展性而制定的一系列指导原则。这些原则有助于开发人员更好地...

    《设计模式:可复用面向对象软件的基础》英文版

    ### 设计模式:可复用面向对象软件的基础 ...总之,《设计模式:可复用面向对象软件的基础》不仅是一本技术手册,更是面向对象设计领域的里程碑之作,对于提高软件开发者的设计思维能力和实践技能具有重要的指导意义。

    《C#面向对象设计模式纵横谈》.pdf

    面向对象设计模式通过类的抽象、类的组织和类之间的通信来实现面向对象设计的优化。 在C#中实现面向对象设计模式,首先需要对面向对象编程语言的特性有充分的理解,包括抽象类、接口、继承和多态等。C#作为一门支持...

Global site tag (gtag.js) - Google Analytics