`
come_for_dream
  • 浏览: 120756 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

面向对象设计原则之单一职责原则和开闭原则

阅读更多

面向对象设计原则之单一职责原则和开闭原则

    
       面向对象的语言依然是现在的主流语言,面向对象的开发方式相比面向过程的开发方式可以提高系统的可维护性和可重用性,在支持可维护性的同时提高系统的可复用性是一个至关重要的问题,如何提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题。因此作为面向对象的开发者很有必要去深入理解面向对象语言的设计思想。


        记得在软件体系结构课上提到,一个软件系统应该是由构件和连接件组成,另外还有约束指出系统如何将这些构件和连接件组合起来。那么我们在写代码的时候要尽量的去制造一些构件和连接件,在我们下次开发系统的时候就可以像组装汽车零件那样来开发我们的系统。在软件工程的思想里面组装构建的方式可以大大降低系统模块之间的耦合,降低开发成本。
那么如如何制造高内聚,低耦合的组件也是一种别样的技术,也是我们学习程序设计语言的重要方向。

       我们要做好的设计就必须按照这些面向对象的设计原则,抛弃以前那些过于僵硬、过于脆弱、复用率低、粘度过高的设计方案灵活运用这些原则实现系统的可扩展性、灵活性、可插入性使得系统可维护性、可复用性大大增强,每种设计原则都值得开发和设计人员细细品味。当我听到刘伟老师讲设计模式的时候顿时如饮甘饴,醍醐灌顶
。下面来简单介绍一下关于这几种设计原则,当然这些原则也就是评价23种设计模式的依据:

 

  1.  单一职责原则

      定义:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。

    类的职责要单一,不能将太多的职责放在一个类中,不能使一个类太累。

    单一职责原则是实现高内聚、低耦合的指导方针。

    类的职责主要包括两个方面:数据职责和行为职责,数据职责通过属性来体现,而行为职责通过方法来体现。如果一个类的职责太多,将导致系统非常脆弱,一个职责可能会影响其他职责,因此要职责分类,比如负责获取数据库连接的职责就可以单独作为类,负责对数据库层CRUD操作可以做成一个类。负责页面控制职责可以做成一个类,比如菜鸟会把一个类的如下设计:


这个类的职责显然太多,涉及到初始化界面、显示、验证输入、获得数据库连接、业务处理等等。如果一个新的项目过来很显然无论界面还是数据库访问都无法达到复用的目的。我么来看一下下面这种设计方案会不会更好些。

 


这样的设计把各个职责分给不同的类,虽然类的个数增加,但是类的复用性增强,DBUtil可以供多个DAO使用,UserDAO也可以供不同的类使用。
 
 

  1. 开闭原则

开闭原则是面向对象的可复用设计的第一块基石,是面向对象设计的目标。一个软件实体应该对扩展开放对修改封闭,也就是说再设计一个模块的时候,应当使得这个模块可以在不被修改的情况下进行扩展,即实现再不修改源代码的情况下通过实现或者继承扩展系统。为了满足开闭原则,我们需要对系统进行抽象化设计,抽象化是实现开闭原则的关键。开闭原则也是实现组件化编程的基础。

         假如一个图形界面提供了不同的形状的按钮,客户可以针对这些形状进行编程,最初的设计可能是这样的

 假如我们需要换一种按钮形状,我们需要将CircleButton修改成RectangleButton类那么我们需要修改源代码,由于这两个按钮类中的方法不同因此我们还需要修改LoginForm中的dispaly方法,不满足开闭原则,设计不够灵活。


上述是面对具体的类进行编程,每次更换集体的类时都需要修改源代码,而且类中没有统一的接口,不满足开闭原则,要满足开闭原则要对按钮类进行抽象化,抽取一个抽象类AbstactButton,LoginForm类针对抽象类AbstactButton进行编程,在JAVA中可以通过配置文件、DOM解析技术、反射机制将类名存储在配置文件中,在运行时生产其对象实例,我们需要修改按钮的类型的时候我们只需要修改配置文件。重构后其满足开闭原则:



 因为XML和properties等格式的配置文件时纯文本文件,可以直接编辑不需要编译,因此修改配置文件并不属于修改源代码

 

 

 


   

 

 

  • 大小: 5.3 KB
  • 大小: 53.7 KB
  • 大小: 38.5 KB
  • 大小: 37.9 KB
  • 大小: 40.4 KB
  • 大小: 162.3 KB
分享到:
评论

相关推荐

    面向对象设计原则PPT

    面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象设计原则

    面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象设计原则.ppt

    1. **单一职责原则(SRP)**:一个类应该只有一个引起它变化的原因。这意味着每个类应专注于一项任务,避免将多个职责混杂在一起。在员工工资计算的例子中,`Employee`类只负责提供薪金计算的接口,具体的计算逻辑则...

    程序员必备的七大面向对象设计原则

    开闭原则是面向对象设计中最重要的原则之一。它定义为:一个软件实体应当对扩展开放,对修改关闭。也就是说,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变...

    面向对象设计原则英文文章

    首先,我们来了解四个基础的面向对象设计原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)和接口隔离原则(ISP)。 1. 单一职责原则(Single Responsibility Principle, SRP):一个类或模块...

    面向对象七大原则

    面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则和组合优于继承原则。 1. 开闭原则(Open-Closed ...

    UML简介与面向对象的设计原则

    1. **单一职责原则(SRP)**:每个类或模块应仅有一个引起其变化的原因,以保持代码的高内聚性。 2. **开放封闭原则(OCP)**:软件实体(类、模块、函数等)应该是可扩展的,但对修改应封闭。这意味着新增功能时,...

    面向对象设计原则解析

    1. **单一职责原则(Single Responsibility Principle, SRP)** 这一原则规定,一个类应该只有一个引起其变化的原因。换句话说,每个类应专注于完成一个特定的职责或功能,避免职责混杂。这样可以提高代码的稳定性...

    面向对象设计原则.pdf

    面向对象设计原则是一系列指导软件开发人员构建高质量、易于维护和扩展的软件系统的准则。这些原则旨在帮助开发者创建更健壮、更灵活的系统,减少代码间的耦合度,并提高代码的重用性和可读性。以下是七个核心的面向...

    单一职责原则(SRP)

    单一职责原则是面向对象设计的基本原则之一,旨在降低类的耦合度和设计复杂度,提高软件的整体质量。 开闭原则(OCP) 开闭原则(OCP)是面向对象设计的五个基本原则之一。该原则规定,软件实体(类、模块、函数...

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

    3. **单一职责原则(Single Responsibility Principle, SRP)** - **原则阐述**:一个类应该只有一个改变的原因。 - **实践意义**:通过将类的功能细化到单一职责,降低类的复杂度,提高代码的可读性和可维护性。 ...

    面向对象的设计原则详解

    1. 单一职责原则(Single Responsibility Principle, SRP): 这个原则要求每个类只负责一个职责或功能,避免类因为承担过多职责而导致复杂性增加。当一个类承担多个职责时,一个职责的变化可能会迫使其他职责的...

    java面向对象设计的六大原则

    以下将详细介绍面向对象设计的六大原则:单一职责原则(Single Responsibility Principle, SRP)、开放封闭原则(Open-Closed Principle, OCP)、里氏替换原则(Liskov Substitution Principle, LSP)、依赖倒置原则...

    面向对象设计原则源码及文档

    面向对象设计原则是OOPS(Object-Oriented ...这些原则已知的有七个,包括:单一职责原则、开闭原则、里氏代换原则、依赖注入(倒转)原则、接口分离原则、迪米特原则、合成聚合复用原则。(文件包括实例源码及文档)

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

    1. 单一职责原则(Single Responsibility Principle, SRP): 每个类或模块应有且只有一个职责,避免功能混合,提高代码的可读性和可维护性。 2. 开闭原则(Open/Closed Principle, OCP): 软件实体(如类、模块、...

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

    面向对象设计模式是软件开发中的重要工具,它们是经过时间考验和广泛实践验证的设计解决方案,旨在提高代码的可重用性、灵活性和可维护性。...因此,学习和掌握面向对象设计模式是每个C#程序员必备的技能之一。

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

    例如,一个处理用户界面和业务逻辑的类违反了单一职责原则,因为它包含了两种不同的职责:用户界面处理和业务逻辑处理。按照SRP,应该将其拆分为用户界面处理类和业务逻辑处理类。 ### 开闭原则(OCP) **定义与...

Global site tag (gtag.js) - Google Analytics