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. Deep Learning Papers

    一.Image Classification(Recognition) lenet: http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf alexn ...

  2. 如何使用iOS 8 指纹识别,代码、示例

    像想象,iOS 8指纹是非常容易使用的.只是需要能够获得一个接口,弹出屏幕模式框,随着app store在相同的. 直接上的条形码.以下代码是从复制Apple官方文件. 加入LocalAuthenti ...

  3. Sicily 1299 Academy Awards (map + vector)集装箱

    链接:http://soj.me/show_problem.php?pid=1299&cid= Description Selected from 3,850 teams from 1,329 ...

  4. 分析RAC下一个SPFILE整合的三篇文章的文件更改

    大约RAC下一个spfile分析_整理在_2014.4.17 说明:文章来源于网络 第一篇:RAC下SPFILE文件改动 在RAC下spfile位置的改动与单节点环境不全然一致,有些地方须要特别注意, ...

  5. oracle_根据ID(字符型)建立分区表

    方案思路:有一张暴增的数据表(10亿级别),以后需求需要提高单条查询性能, 这个表有个唯一ID, 假设是UUID,采用区分首字母的方法,不同字母的数据入到不同的物理文件中. 第一步: 查找数据库服务器 ...

  6. 小程序大智慧,sqlserver 注释提取工具

    原文:小程序大智慧,sqlserver 注释提取工具 开篇背景 我习惯在写表的创建脚本时将注释直接写在脚本里,比如 /*账套*/ CREATE TABLE [dbo].[AccountingBook] ...

  7. 编译AVX代码,升级Redhat 5.5 GCC至4.7.1

    Redhat 的GCC编译器4.1版本号,为SSE4,AVX,AVX2支持不够好,官方建议4.7以上. 就这样开始了GCC升级之路. 因为Redhat 5.5它安装在一个虚拟机.全然解决,经过若干尝试 ...

  8. 矿Mac必备软件

    1.Svn工具: Cornerstone_v2.7.10 2.iPhone配置文件管理 iPhoneConfigUtility.dmg 3.有道 for mac http://cidian.youda ...

  9. ACM经典算法之字符串处理:字符串替换

    语法:replace(char str[],char key[],char swap[]); 參数: str[]:在此源字符串进行替换操作 key[]:被替换的字符串,不能为空串 swap[]:替换的 ...

  10. Windows Phone 8.1 多媒体(2):视频

    原文:Windows Phone 8.1 多媒体(2):视频 Windows Phone 8.1 多媒体(1):相片 Windows Phone 8.1 多媒体(2):视频 Windows Phone ...