老调重弹--面向对象设计原则--GRASP设计原则
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设计原则的更多相关文章
- SOLID面向对象的五个设计原则,留空待学习。
SOLID面向对象的五个设计原则对于开发人员非常重要,其身影在任何大中型软件项目中随处可见,建议必须掌握并灵活应用.此五原则分别为: 单一职责原则(Single Resposibility ...
- java设计模式:面向对象设计的7个原则
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据7条原则来开发程序,从而提高软件开发效率,节约软件开发成本和维护成本. 这7条原则分别是:开闭原则.里氏 ...
- 面向对象设计原则 依赖倒置原则(Dependency Inversion Principle)
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现. 简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块 ...
- 面向对象SOLID设计原则之Open-Closed原则
首先,我们看下开放-封闭原则(Open-Closed Principle,简称OCP)的概念: 是指软件实体(类.模块.函数等)应该可以扩展,但是不可修改. 任何新功能(functionality)应 ...
- 设计模式<面向对象的常用七大设计原则>
面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源码的重用,另一方面要确保系统能够易于扩展和修改,具有较好的灵活性. 常用的设计原则有七个原则: 1.单一职责原则(single ...
- Java 程序员应在2019年学习的10条面向对象(OOP)设计原则
面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 Observer 模式之类的设计模式,而对学习面向 ...
- OO设计原则 -- OO设计的原则及设计过程的全面总结
这部分增加一点自己的感想,OO设计原则下面讲述的很清晰;看完之后有点感想如果我们在实际开发当中能够把这些原则熟烂于心的话那我们的代码质量和个人能力会有很显著的提神.根据自己的实际经验看很多开发者在开发 ...
- java设计原则---开闭原则
开闭原则:指的是一个软件实体应对对扩展开发,对修改关闭(Software entities should be open for extension, but closed for modificat ...
- 好的框架需要好的 API 设计 —— API 设计的六个原则
说到框架设计,打心底都会觉得很大很宽泛,而 API 设计是框架设计中的重要组成部分.相比于有很多大佬都认可的面向对象的六大原则.23 种常见的设计模式来说,API 设计确实缺少行业公认的原则或者说设计 ...
随机推荐
- 导航控制器生产,push,pop,root,index
AppDelegate.m #import "FirstViewController.h" @implementation AppDelegate - (BOOL)applicat ...
- hibernate Disabling contextual LOB creation as connection was null
使用hibernate通路sybase当遇到异常. Could not obtain connection metadata : ASE is now using a multi-byte c ...
- opengl
扳回一球
本文介绍了使用两种方法opengl画一个球体,一个是一个球形点位置计算,然后绘制出,还有一个glut套件自带功能. 一.直接绘制法 直接贴代码,解释都写在凝视里了.绘制时先移动好坐标系.然后调用这方法 ...
- git branch(转)
git branch git branch 不带参数:列出本地已经存在的分支,并且在当前分支的前面加“*”号标记,例如: #git branch* master newbranch gi ...
- typedef和define具体的具体差异
1) #define这是一个预处理指令,简单的更换当预处理程序.不检查的正确性,仍不能正常关机进入的意思,那里只是已被展开时编译源代码会发现可能的错误和错误. 例如: #define PI 3.1 ...
- nova-compute[5410]: OSError: [Errno 13] Permission denied: '图像路径'
前几天有 openstack-Nova 创建虚拟机拨弄了一下,结果重新启动后的今天 nova boot 创建虚拟机实例有错误,创建虚拟机出状况 他们是 error 视图 openstack 服务状态 ...
- HTML DOM的nodeName,nodeValue,nodeType介绍
将HTML DOM中几个常用的属性做下介绍,工作中作为参考. nodeName 属性可依据节点的类型返回其名称. 元素节点的 nodeName 是标签名称 属性节点的 nodeName 是属性名称 文 ...
- 使用excel微调button调整日期
笔者:iamlaosong excel提供了一个调整的数字button.用来调节单元格增加或减少数量.因为它需要值是0-30000.所以不能直接用其调节日期.但能够使用"初始日期+调节值&q ...
- MSSQL发现第五到数据的第十
第二十数据查询数据库,第十条数据,两起案件: 1,ID是连接的,当然这样的情况比較好查.直接SELECT就能够了.取ID大于5小于10就能够了, 这样的情况比較少. 2.ID不是连接的.假设要取第五条 ...
- JavaScript Date对象介绍
原文:JavaScript Date对象介绍 Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new ...