Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”
1. GRASP (职责分配原则) 1
1.1. GRASP设计模式 1
1.2. 9个基本的OO设计原则或基本的设计构件。这9个设计模式分别是:创建者(Creator)、信息专家(Information Expert)、低耦合(Low Coupling)、控制器(Controller)、高内聚(High Cohesion)、多态性(Polymorphism)、纯虚构(Pure Fabrication)、间接性(Indirection)、防止变异(Protected Variations)。 2
1. GRASP (职责分配原则)
1.1. GRASP设计模式
说到设计模式,更为人所知的当然是GoF(Gang of Four)的23种设计模式。与GoF的23种设计模式不同的是,GRASP设计模式描述的是在OO设计中为互相协作的类分配职责的原则或者建议,而GoF的设计模式则是在更高的层次上描述一个OO系统或者其局部系统的行为以及结构上的抽象。
GRASP设计模式的全称是General Responsibility Assignment Software Patterns,即通用职责分配软件模式。它定义了
1.2. 9个基本的OO设计原则或基本的设计构件。这9个设计模式分别是:创建者(Creator)、信息专家(Information Expert)、低耦合(Low Coupling)、控制器(Controller)、高内聚(High Cohesion)、多态性(Polymorphism)、纯虚构(Pure Fabrication)、间接性(Indirection)、防止变异(Protected Variations)。
GRASP,全称为General Responsibility Assignment Software Pattern,即通用职责分配软件模式,它由《UML和模式应用》(Applying UML and Patterns)一书作者Craig Larman提出。与其将它们称之为设计模式,不如称之为设计原则,因为它是站在面向对象设计的角度,告诉我们怎样设计问题空间中的类与分配它们的行为职责,以及明确类之间的相互关系等,而不像GoF模式一样是针对特定问题而提出的解决方案。因此GRASP站在一个更高的角度来看待面向对象软件的设计,它是GoF设计模式的基础。
GRASP是对象职责分配的基本原则,其核心思想是职责分配(Responsibility Assignment),用职责设计对象(Designing Objects with Responsibilities)。它包含如下9个基本模式:
1. 信息专家模式 (Information Expert Pattern)
(1) 问题:给对象分配职责的通用原则是什么?
(2) 解决方案:将职责分配给拥有履行一个职责所必需信息的类,即信息专家。
(3) 分析:信息专家模式是面向对象设计的最基本原则。通俗点来讲,就是一个类只干该干的事情,不该干的事情不干。在系统设计时,需要将职责分配给具有实现这个职责所需要信息的类。信息专家模式对应于面向对象设计原则中的单一职责原则。
2. 创造者模式 (Creator Pattern)
(1) 问题:谁应该负责产生类的实例?
(2) 解决方案:如果符合下面的一个或者多个条件,则可将创建类A实例的职责分配给类B:
· B包含A;
· B聚合A;
· B拥有初始化A的数据并在创建类A的实例时将数据传递给类A;
· B记录A的实例;
· B频繁使用A。
此时,我们称类B是类A对象的创建者。如果符合多个条件,类B聚合或者包含类A的条件优先。
(3) 分析:创建对象是面向对象系统中最普遍的活动之一,因此,确定一个分配创建对象的通用职责非常重要。如果职责分配合理,设计就能降低耦合,提高设计的清晰度、封装性和重用性。通常情况下,如果对象的创建过程不是很复杂,则根据上述原则,由使用对象的类来创建对象。但是如果创建过程非常复杂,而且可能需要重复使用对象实例或者需要从外部注入一个对象实例,此时,可以委托一个专门的工厂类来辅助创建对象。创建者模式与各种工厂模式(简单工厂模式、工厂方法模式和抽象工厂模式)相对应。
GRASP设计模式及OO设计原则浅谈-钟声的博客-搜狐博客!!!.htm
GRASP模式 - 刘伟技术博客 - 博客频道 - CSDN.NET.htm
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak
简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui
埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门 本亚当 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
uke宗教与文化融合事务部部长, uke宗教改革委员会副主席
uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,
uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人
转载请注明来源:attilax的专栏 http://blog.csdn.net/attilax
Atitit GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软件模式”相关推荐
- GRASP通用职责分配软件模式
1. 概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...
- 软件工程笔记:通用职责分配模式(grasp)
通用职责分配模式(grasp) - 笔记整理自 北京理工大学 计算机学院 什么是GRASP? General Responsibility Assignment Software Patterns(通 ...
- GRASP设计原则(职责分配原则)
GRASP设计原则(职责分配原则) GRASP(General responsibility assignment software Principle)设计原则是设计模式的基础,在GOF的23中设计 ...
- GRASP软件职责分配原则
http://tommwq.tech/blog/2020/11/05/189 GRASP是General Responsibility Assignment Software Pattern的缩写,是 ...
- 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...
设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns) 目录 · 概述 · Factory · What is the Fact ...
- 集成沟通中的名词:DMZ 是英文“Demilitarized Zone”的缩写,中文名称为“隔离区”
DMZ 是英文"Demilitarized Zone"的缩写,中文名称为"隔离区", 与军事区和信任区相对应,也称"非军事化区",是为了解决 ...
- 《Small Memory Software:Patterns For System With Limited Memory》读书笔记
原文地址:http://blog.csdn.net/jinzhuojun/article/details/13297447 虽然摩尔定律让我们的计算机硬件得以以指数速度升级,但反摩尔定律又不断消减这些 ...
- Web Client Software Factory系列(3):View-Presenter模式
概述 将一个ASP.NET站点分离为多个独立的模块,一个最大的问题就是与页面相关联的大多数业务逻辑驻留在该页面的源代码文件中,我们几乎做不到将源代码文件分为多个独立的程序集.为了真正创建独立的与站点中 ...
- Single Responsibility Principle (SRP) - OO设计的单一职责原则
前言 Robert C. Martin氏为我们总结了在面向对象的设计(OOD)中应该遵循的原则,这些原则被称为"Principles of OOD",关于"Princip ...
- 批量转换中文名称为英文名称(注:一般为转换格式拼音)
1.在Excel表中复制需要转换的文字,到world/WPS中.点击word中开始菜单的文下拉框,选中拼音指南. 2.得出如下带拼音格式,粘贴复制到excel中(另起一行) 3.再另行一行,输入公式[ ...
最新文章
- 千亿参数大模型时代,QQ浏览器团队十亿级小模型「摩天」登顶CLUE
- php中的extract函数
- 用 for/in 在 Java 5.0 中增强循环
- USACO Broken Necklace 题解(环展开成链,枚举)
- GCC,Clang,make,cmake,makefile,CMakeLists.txt的概念
- fastreport(A)
- java空心字木塔_我国七个千年古塔:第四个空心没有塔顶,最后一个是木塔无钉无铆...
- 怎么在linux中查询yum,linux - 如何使用YUM列出包的内容?
- C 语言实例 - 斐波那契数列
- 卸载jlink驱动出现Could not open INSTALL.LOG file错误解决方案
- knx智能照明控制系统电路图_智能照明控制系统应用效果
- shell批量文件编码转换
- 在html文件中使用支持FLV、HLS、RTSP、WS-FLV/WS-RTSP、WEBRTC、HEVC/H265的永久免费H5直播点播播放器SkeyeWebPlayer.js
- (四)BP神经网络预测(上)
- java实现给图片添加水印
- 雷达方程 与 根据用途演化的其它形式
- 谷歌扫图识人_谷歌新的一项黑科技:手机“识人” 密码再见
- Conflux人物志 | Péter明哲 Marcel马驰
- 通信工程测试图修改软件,通信工程工具仪器大全,你用过几种?
- flappybird原理解析 JQuery版本
热门文章
- printf标识总结
- Vue.js 还是 React?你会选择哪一个?为什么?
- DBA,六个灾难恢复等级你都知道吗?
- LNMP架构 源码安装nginx+mysql+php+memcache+论坛
- labview学习之“创建数组”函数
- c++中的243、251、250错误原因
- 程序内购买 图文攻略
- XPath详解,总结
- 用php的ob_start()控制浏览器cache
- Mybatis-学习笔记(10)调用存储过程、存储函数