老调重弹--面向对象设计原则--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 设计确实缺少行业公认的原则或者说设计 ...
随机推荐
- 他们控制的定义(2.3):SurfaceView和SurfaceHolder
这个例子需求和流程: Activity加载它们的定义SurfaceView-> SurfaceView 构造函数:初始化刷.传感器.SurfaceHolder和注册SurfaceHolder的监 ...
- 怎么理解Condition(转)
在java.util.concurrent包中,有两个很特殊的工具类,Condition和ReentrantLock,使用过的人都知道,ReentrantLock(重入锁)是jdk的concurren ...
- 【安德鲁斯】于java代码集drawableLeft给予适当的大小如何,当?
textView.setCompoundDrawables(drawable, null, null, null);如果看不到图片,这是由于需要手动定drawable适当的大小,使用drawable. ...
- Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
GXPT它是一个分布式系统,该系统包括一个临时许可系统.基本系统.教学评价体系.考试系统,每个系统都有自己的oracle数据库.统,而评教系统的正常须要借助于权限系统和基础系统,详细的业务这里就不多解 ...
- 易Android登录Demo
上一页介绍Android项目简单的页面跳转实例,算是对开发环境的熟悉,这一篇将在此基础上增加一些简单的逻辑,实现登录的效果. 登录之前: 登录成功: watermark/2/text/aHR0cDov ...
- 体验VS2015正式版
初次体验VS2015正式版,安装详细过程. 阅读目录 介绍 安装 介绍 纽约时间7月20日,微软发布了vs 2015 正式版,换算到我们的北京时间就是晚上了,今天回到家里,就下下来了,装上去 ...
- cocos2d-x3.x 设计与实现弹出对话框
要定义一个类PopupLayer 代码PopupLayer.h #ifndef __crossDT_PopupLayer__ #define __crossDT_PopupLayer__ #inclu ...
- JS脚本显示当前日期+星期几[转]
以下的代码提供了显示当前日期和星期几的实现方法: function writeDateInfo() { var day=""; var month= ...
- Object.extend
原文:[转载]Object.extend Object.extend = function (destination, source) { for ( var property in source) ...
- 小记 js unicode 编码解析
原文:小记 js unicode 编码解析 var str = "\\u6211\\u662Funicode\\u7F16\\u7801"; 关于这样的数据转换为中文问题,常用的两 ...