单一职责原则
这个原则描述了内聚性:一个模块组成元素的功能相关性。单一职责原则描述了引起类变化的原则只有一个,而职责就是变化的原因,如果你能够想到多于一个动机去改变类,那么这个类就具有多于一个职责。
例如
class Rectangle{
public void draw();
public double area();
}
如果这个类为两个不同的应用程序所使用:计算几何学方面的,它只需要提供计算面积的方法,图形绘制方面的,它可能只需要在屏幕上绘制自己。那么这个类就有了两个职责,这种设计违反了单一职责原则。当我们在计算几何学方面方面需要新的功能时我们需要修改这个类,
当在图形绘制方面修改这个类时也需要修改这个类。
这样我们可以把这个Rectangle分成两个:
class GeometricRantangle{
public double area();
}
class GUIRectangle(){
public void draw();
}
这样当我们需要在计算几何学方面使用Rantangle时,我们直接使用GeometricRantangle,图形绘制方面直接使用GUIRectangle。
再看一个调制解调器的例子:
interface Moderm{
public void dial(String pno);
public void hangup();
public void send(char c);
public void recv();
}
多数人会认为这个接口是合理的,但这个接口却承担了两个职责:一是连接管理;二是数据通信。而在大多数应用中,连接管理和数据通信往往是分开的。如果无论连接管理发生了变化还是数据通信发生了变化,我们都需要修改这个类,这就造成了编译和部署的次数会超过我们希望的次数,这个设计具有僵化的Bad Smell.这种情况下我们希望把这两个职责分离:
interface Connection{
public void dial(String pno);
public void hangup();
}
interface Channel{
public void send(char c);
public void recv();
}
class Moderm implements Connection,Channel{
//...
}
虽然我们看到Moderm依然是一个杂凑物,似乎也有两个职责,但这是必须的,因为这是对Moderm 功能真实的抽象。但是,这样我们需要连接管理的时候,我们只依赖于Connection接口,当我们需要数据通信的时候只需要依赖Channel接口,谁都不需要依赖具体的Moderm.单一职责通常是针对提供给用户接口来说的,而实际类作为一个实际的对用物,有
多种职责可能是必须的,只要我们抽象出单一职责的接口,让其他的代码只依赖于这些接口就行了。
我们在企业级开发时经常遇到的情况是,在业务层写持久化规则,业务规则是经常变化的,而持久化规则通常是稳定的。如果不把他们分离,每次变化我们都要编译部署整个混合体,这只能是自找苦吃。通常的做法是使用DAO模式,分离出数据访问层,让业务层依赖于DAO接口,这样业务层发生变化时,不会影响 数据访问层,并且可以随时替换掉数据访问层的具体实现。
当然如果应用程序的变化总会导致这两种职责的同时变化,那么就不必分离他们,毕竟单一职责原则会带来一些复杂性,生成更多的接口。如果过度使用这个原则会造成过度设计的Bad Smell.
分享到:
相关推荐
设计模式是建立在面向对象原则基础上的。面向对象的设计强调类和对象的组织,以及它们之间的相互作用。面向对象设计模式通过类的抽象、类的组织和类之间的通信来实现面向对象设计的优化。 在C#中实现面向对象设计...
在IT行业中,面向对象设计模式是软件开发中的重要概念,特别是在使用C#这样的面向对象编程语言时。设计模式是经过时间验证的、可重用的解决方案,用来解决在软件设计中经常遇到的问题。本视频教程“C#面向对象设计...
在IT行业中,面向对象设计模式是软件开发中的重要概念,特别是在.NET框架,如C#这样的编程语言中。本文将深入探讨“C#面向对象设计模式纵横谈”视频教程及其源码,帮助开发者理解和掌握这些模式在实际项目中的应用。...
在面向对象编程中,设计模式帮助我们遵循一些基本原则,以提高代码的灵活性、可维护性和可扩展性。在这个主题中,我们将深入探讨"单件模式"这一重要的创建型设计模式。 单件模式是一种确保一个类只有一个实例,并...
面向对象设计模式与面向对象原则的关系 面向对象设计模式是建立在良好的面向对象设计基础上的。优秀的面向对象设计能够更好地应对需求的变化,并提高代码的复用性。面向对象设计模式不仅关注于类的设计,还强调了...
面向对象设计原则是软件开发中的核心概念,尤其在Java、C++等面向对象编程语言中至关重要。这些原则为创建可维护、可扩展和可重用的代码提供了指导框架。这篇文章将深入探讨面向对象设计原则,并结合设计模式进行...
### 面向对象自动化测试框架的研究与设计 #### 摘要与引言 本文主要探讨了面向对象自动化测试框架的设计与实现。随着软件规模的不断扩大,传统的手动测试已经无法满足快速迭代的需求,因此自动化测试成为了提高...
本文将深入探讨C#中的面向对象设计模式及其原则,旨在为程序员提供一个理解和应用这些模式的框架。 首先,我们来理解什么是设计模式。设计模式是一种在特定情况下解决问题的通用、可复用的解决方案,它描述了在软件...
而面向对象的C++设计模式则是将这两种概念巧妙融合,为软件开发提供了强大的工具和框架。下面,我们将深入探讨这些关键知识点。 首先,我们要了解**数据结构**。数据结构是指在计算机中组织和存储数据的方式,以...
本文将深入探讨C#中的核心面向对象概念,以及与之相关的UML(统一建模语言)、设计原则和模式。 1. **dotNet概述** .NET是微软推出的一个开发平台,它提供了丰富的库和服务,支持多种语言(如C#、VB.NET、F#等)...
《清华Java语言与面向对象程序设计》是一门深入讲解Java编程和面向对象设计的课程,旨在帮助学习者掌握Java编程的基础知识以及如何运用面向对象的思想进行软件开发。课程内容覆盖了从基本语法到高级特性,从理论概念...
通过PPT的学习材料,我们可以深入探讨每个主题,如“设计模式”可以帮助我们更好地理解和应用常见的软件设计解决方案,“UML介绍”让我们掌握统一建模语言,用于系统分析和设计,“面向对象设计原则”如单一职责、开...
6. **面向对象设计原则与设计模式**:第十六章提供了面向对象设计的原则和常用的设计模式,帮助开发者更好地组织代码和解决实际问题。 #### 特色亮点 与其他同类教材相比,《面向对象程序设计与Java语言》具有以下...
面向对象设计模式是软件开发中的重要概念,尤其是在C#这样的面向对象编程语言中。设计模式是一种在特定场景下解决问题的标准化解决方案,它来源于实践中并被广泛验证为有效的。本篇文章将深入探讨C#中面向对象设计...
### 设计模式基础培训材料-面向对象设计原则与模式 ...以上概述了面向对象设计的基本原则以及23种设计模式,并通过Qt框架中的实例进行了简要说明。理解和应用这些原则和模式对于构建高质量的软件系统至关重要。
6.恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计...
本系列视频教程旨在通过12天的学习与实践,帮助开发者掌握如何使用PHP语言构建一个面向对象的自定义MVC框架,并应用到实际项目中。 #### 二、MVC架构基础 1. **MVC概述** - **模型(Model)**:负责处理应用程序的...
总结来说,"面向对象分析与设计"主题涵盖了大量的理论知识和实践经验,包括面向对象的基本概念、设计原则、设计模式以及在Java项目中的实际应用。通过学习相关书籍和研究实际项目源码,开发者可以提升自己的面向对象...