GRASP概述

GRASP,全称General Responsibility Assignment Software Patterns,译为”通用职责分配软件原则“,包含以下原则和模式

控制器(Controller)

控制器模式用来接收和处理系统事件的职责,一般应该分配给一个能够代表整个系统或者单个用例场景

  • 一个用例控制器应该用来处理一个用例的所有系统事件
  • 控制器对象定义为UI展现层之上的第一个对象负责接收和协调系统操作
  • 控制器本身不应该包含太多逻辑和功能
  • 在N-Layer多层架构应用程序中,控制器一般处于Application和Service层之间
  • 参见:MVC模式

创建者(Creator)

对象的创建是面向对象系统中非常通用的行为,一般情况下,符合以下条件,都由B创建A,B是A的创建者:

  • B是A的聚合
  • B是A的容器
  • B记录了A的实例
  • B频繁密切使用A的实例
  • B持有初始化A的信息

高内聚(High Cohesion)

高度封装用来支持对象的可管理性、可读性和重用性,功能相关的职责放在一个类里,共同完成有限的功能

  • 高内聚通常用来支持低耦合
  • 可管理
  • 可理解
  • 可重用
  • 职责单一,方便扩展

间接(Indirection)

间接模式通过在两个元素中间分配一个中介者对象来支持松散耦合(无直接依赖关系),比如MVC中的“C”

信息专家(Information Expert)

信息专家(也叫专家模式)用来决定在哪里委托职责,这些职责包含方法、计算域等等

  • 某个类拥有完成某个职责所需要的所有信息,那么这个职责就应该分配给这个类来实现
  • 专家模式用来分配职责,根据给定的职责去查询和存储信息

松散耦合(Low Coupling)

松耦合作为评估系统设计的一种原则,职责体现在:

  • 降低类与类之间的依赖
  • 改变一个类对其他类的影响降至最低
  • 更高的重用性

多态(Polymorphism)

在继承系统中,使用设计时相同的定义在运行时产生不同的调用

受保护的变更(Protected Variations)

该模式通过防止外部系统(对象,系统,子系统)修改元素来得到包含元素防止变更的目的

  • 使用接口包装不稳定易变的元素
  • 为接口创建不同的实例,实现多态
  • 如果未来发生变化,扩展接口新的实现,不需要修改原有实现
  • 基本等同于OCP(开闭原则)

纯虚构(Pure Fabrication)

使用纯虚构来协调内聚和耦合,在一定程度上解决了系统对象交互之间的依赖性

老调重弹--面向对象设计原则--GRASP设计原则的更多相关文章

  1. SOLID面向对象的五个设计原则,留空待学习。

     SOLID面向对象的五个设计原则对于开发人员非常重要,其身影在任何大中型软件项目中随处可见,建议必须掌握并灵活应用.此五原则分别为:     单一职责原则(Single Resposibility ...

  2. java设计模式:面向对象设计的7个原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本. 这7条原则分别是:开闭原则.里氏 ...

  3. 面向对象设计原则 依赖倒置原则(Dependency Inversion Principle)

    依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现. 简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块 ...

  4. 面向对象SOLID设计原则之Open-Closed原则

    首先,我们看下开放-封闭原则(Open-Closed Principle,简称OCP)的概念: 是指软件实体(类.模块.函数等)应该可以扩展,但是不可修改. 任何新功能(functionality)应 ...

  5. 设计模式<面向对象的常用七大设计原则>

    面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源码的重用,另一方面要确保系统能够易于扩展和修改,具有较好的灵活性. 常用的设计原则有七个原则: 1.单一职责原则(single ...

  6. Java 程序员应在2019年学习的10条面向对象(OOP)设计原则

    面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 O​​bserver 模式之类的设计模式,而对学习面向 ...

  7. OO设计原则 -- OO设计的原则及设计过程的全面总结

    这部分增加一点自己的感想,OO设计原则下面讲述的很清晰;看完之后有点感想如果我们在实际开发当中能够把这些原则熟烂于心的话那我们的代码质量和个人能力会有很显著的提神.根据自己的实际经验看很多开发者在开发 ...

  8. java设计原则---开闭原则

    开闭原则:指的是一个软件实体应对对扩展开发,对修改关闭(Software entities should be open for extension, but closed for modificat ...

  9. 好的框架需要好的 API 设计 —— API 设计的六个原则

    说到框架设计,打心底都会觉得很大很宽泛,而 API 设计是框架设计中的重要组成部分.相比于有很多大佬都认可的面向对象的六大原则.23 种常见的设计模式来说,API 设计确实缺少行业公认的原则或者说设计 ...

随机推荐

  1. 普及windows流氓程序和监控软件

    win7下载更改后无黑屏windows7激活程序v1.0 一个立即安装 美女主播节目,和流行的色情垃圾邮件 安装程序,结果装了很多垃圾节目,输入.日历.文件等. 重新启动机器后,,会弹出广告. .他的 ...

  2. Java内部类详解(转)

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟.下面是本 ...

  3. (大数据工程师学习路径)第二步 Vim编辑器----Vim快速入门

    vim模式介绍 以下介绍内容来自维基百科Vim 从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截 ...

  4. JavaEE(10) - Session EJB的依赖注入、引用及任务调度

    1. EJB依赖注入 #1. EJB开发(Net Beans创建EJB Module, 项目名称:CallHello) Hello.java package org.crazyit.service; ...

  5. 【转】angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下   通常大家在 ...

  6. 我展示了视频采集前端vfe和camera,decode等交互驱动的体系结构

    到现在都与处理器接触较多.更深入的驱动主要是前端视频采集.控制TI的DM64xx,DM3730.纪氏A31等待.他们发现,它们的使用的基本框架的是不一样的. 当然,典型camera例如ov系列,dec ...

  7. 我的Linux学习历程:那些我看过的Linux书籍们

    [+]查看原图http://www.ituring.com.cn/article/119401 来北京工作已经一个多月,大都市的生活比起读大学要忙碌得多,尤其是出行,基本以小时为基本的计时单位.有时茫 ...

  8. 第19章 解释器模式(Interpreter Pattern)

    原文 第19章 解释器模式(Interpreter Pattern) 解释器模式 导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲 ...

  9. 浅谈JavaScript中typeof与instanceof的区别

      首先,我们从其常规定义入手:       instanceof 运算符可以用来判断某个构造函数的 prototype 属性是否存在另外一个要检测对象的原型链上.(需要注意的一点是:prototyp ...

  10. windows编ffmpeg2.2.4和插件h265

    0.前言 据说新出来了h265的视频,在迅雷看看上面看到的.网上查看了一下简单介绍,貌似h265的视频比h264的视频压缩率要高.并且能做4K的视频. 同一时候看到网上有人试过ffmpeg在编译的时候 ...