`
Moyunyu
  • 浏览: 14660 次
  • 性别: 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):面向对象设计模式与原则.zip

    1. **设计原则**:面向对象设计模式的基础,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则指导我们编写可维护、可扩展的代码。 2. **常见设计模式*...

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

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

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

    本文将深入探讨面向对象设计中的核心原则,并通过具体示例来阐述这些原则的实际应用。 ### 一、开闭原则(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"来推测可能包含的内容。 一、面向对象...

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

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

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

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

    《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式

    - **深入理解面向对象编程**:掌握设计模式有助于更深刻地理解面向对象的设计原则和技术。 ### 23种经典设计模式概览 《设计模式:可复用面向对象软件的基础》一书介绍了23种经典的设计模式,这些模式大致可以分为...

Global site tag (gtag.js) - Google Analytics