grasp设计模式笔记回顾
根据讲师所讲做了一下笔记以便自己能方便学习:
------------------------------------------grasp设计模式;
grasp(general responsibility assignment software patterns:通用职责分配软件模式)模式相对于gof23模式更加抽象,
它的核心思想:职责如何分配和如何用用职责设计对象;
它的五个基本模式:
---信息专家、创建者、高内聚、低耦合、控制器;
四个扩展模式;
---多态性、纯虚构、间接性、防止变异;
---------------------------------------------
---------------------信息专家:
职责分配给那个对象,要看这个职责所需要的信息是哪个对象所拥有的,拥有资源的对象
才有资格执行职责,这也体现了对象封装的概念。信息的拥有者,同时就是对象的操作者,
可以减少不必要的类之间的关联,体现了设计原则:类的单一职责。
---------------------创建者:
类的实例应该有谁来创建;创建的职责应该交给谁;
b_=>a:包含,聚集、记录、频繁使用、有出事化数据;
优点:整个结构很清晰,有利于类或组件的使用,防止职责分散(信息专家),降低耦合度;
---------------------高内聚:
解决一个怎样才能降低类的复杂度,简化控制,
我们赢将紧密相关的功能或职责分配给同一个类(各司其职)
优点:聚集相关的功能结构清晰,容易理解。
类的单一,使得简化。
-----------------------低耦合:
如何降低类之间的关联程度,能适应需求变化;
为类分配职责时,应该尽量降低类之间的关联关系;
使得系统中某一部分的变化对其他部分影响降低到最低;
-----------------------控制器:
在UI之外,应该由哪个类处理系统的事件呢。
把系统事件处理的职责分配给controller类;
好处:防止同类职责的分散,满足高内聚,低耦合原则,变化的高度适应能力;
-----------------------多态性:
如何创建可插拔的软件构件。
当相关选择或行为岁类型有所不同时,使用多态操作作为变化的行为类型分配职责。
-----------------------纯虚构:
有时候不想违背高内聚低耦合的目标,但信息专家模式提供的解决方案又不合适时。
solution:对人为制造的类分配一组高内聚的职责,该类并不代表问题领域的概念-
虚构的事物,用以支持高内聚,低耦合和复用。
个人理解:为了达到更好的设计而虚构出来的对象来去行使某些不好分配的职责。
比如gof中命令模式,我们虚构出一个类来存储命令,以实现排队功能。
gof设计模式全都是纯虚构。为了更好的解决问题虚构出来的类;
------------------------间接性:
比如终结者、adapter适配器,都起到了简介的效果
------------------------防止变异:
为了不让对象内部的变化或不稳定性不会对其他元素产生不良影响(实际高内聚)
我们可以通过创建稳定的接口来解决,就是所说的针对接口编程,而不是针对实现编程。
像封装、多态、接口、虚拟机、配置文件都是为了这个,哪里动就封装哪里,以至于不影响其他
的相关联的对象,同样也是为了更好的变化和扩展。使之更稳健。
grasp设计模式笔记回顾的更多相关文章
- php设计模式笔记:单例模式
php设计模式笔记:单例模式 意图: 保证一个类仅有一个实例,并且提供一个全局访问点 单例模式有三个特点: 1.一个类只有一个实例2.它必须自行创建这个实例3.必须自行向整个系统提供这个实例 主要实现 ...
- JAVASE笔记回顾
第一部分,JAVA基础和面向对象 part01 入门与开发环境搭建 1: 计算机基础知识(了解)(1)计算机(2)计算机硬件(3)计算机软件系统软件:windows,linux,mac应用软件:QQ, ...
- Asp.net设计模式笔记之二:应用程序分离与关注点分离
本次笔记主要涉及的内容如下: 1.将智能UI(SmartUI)反模式重构成分层方式的示例代码 2.分层设计与传统的Asp.net WebForm模型(代码后植)相比具有的优势 3.逻辑分层概念以及分离 ...
- [设计模式] .NET设计模式笔记 - 了解设计模式
今天在TerryLee的cnblog(http://terrylee.cnblogs.com)里看到了与设计模式相关的整套文章,初学设计模式看完每篇文章后做些笔记和摘抄. ●什么是设计模式,什么是架构 ...
- php设计模式笔记--总结篇
一.引入 设计模式的一般定义不再说,只大概说一下我理解的设计模式,我理解的设计模式的主要目的是利用面向对象(类.接口等)特点,让代码更加易于扩展,易于重用,易于维护.这三个特点也就要求我们不要将太多 ...
- <大话设计模式>笔记
读完了<大话设计模式>这本书,收获很多,对程序设计有了很多新的理解.将每章模式的大概要点做了些笔记以备查阅,一些设计模式书读完也对其了解得不是很透彻,需要以后在实践中来不断地加深理解吧.读 ...
- Javascript设计模式笔记
Javascript是越来越厉害了,一统前后端开发.于是最近把设计模式又看了一遍,顺便做了个笔记,以方便自己和他人共同学习. 笔记连载详见:http://www.meteorcn.net/wordpr ...
- 高级需求分析UML建模设计模式笔记
1.REQ->HLR 分析 全系统性质->AD设计 Context,BOM,Conception 2.REQ->LLR 分析 模块分析->DD设计 + 编码 Feature,B ...
- 设计模式笔记(一):Singleton 设计模式
今天开始学习设计模式,借此机会学习并整理学习笔记. 设计模式是一门不区分语言的课程,什么样的编程语言都可以用到设计模式.如果说java语法规则比作武功招式的话,那么设计模式就是心法. 设计模式共有23 ...
随机推荐
- KMP算法(转)
KMP算法 在介绍KMP算法之前,先介绍一下BF算法. 一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个 ...
- 蜗牛—苍茫IT文章大学的路(十)
昨晚,有个叫***培训机构鼓吹我们学校.起初我还以为是介绍这个游戏吧.谁知道.它原来是一个培训结构.去年我买的表啊 我知道这会不会去,我也浪费了时间审查.因为今天下午和晚上来测试啊.我没有审查,. 当 ...
- [LeetCode] 036. Valid Sudoku (Easy) (C++)
指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 036. ...
- React学习系列
React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初 ...
- Android一些解决方案内存问题(一)
通常我们遇到内存问题时,,解决方案一般有以下的例子: 1.做一些处理上的内存引用,经常使用软引用.加强引用.弱引用: 2.加载在内存中的照片时,它可以处理直接在内存,例如:压缩边界. 3.内存的动态恢 ...
- 全排列 ( next_permutation)
SLT: C++的STL有一个函数可以方便地生成全排列,这就是next_permutation 在C++ Reference中查看了一下next_permutation的函数声明: #include ...
- ocp11g培训内部教材_052课堂笔记(042)_体系架构
OCP 052 课堂笔记 目录 第一部分: Oracle体系架构... 4 第一章:实例与数据库... 4 1.Oracle 网络架构及应用环境... 4 2.Oracle 体系结构... 4 3. ...
- Mac+PhpStorm+XAMPP+Xdebug
Mac+PhpStorm+XAMPP+Xdebug 环境的配置 在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体验,非常简略的介绍和对比了几款常用的集成开 ...
- Swift语言指南(五)--数字字面量和数字类型转换
原文:Swift语言指南(五)--数字字面量和数字类型转换 数字字面量 整数字面量写法如下: · 十进制数,无前缀 · 二进制数,以 0b 为前缀 · 八进制数,以 0o 为前缀 · 十六进制数,以 ...
- Jquery()核心函数的7个重载方法
(1) jquery() 该函数返回一个空的jQuery对象.在jQuery1.4以后的版本中,改函数返回一个空的jQuery对象.在之后的版本中,该函数会返回一个包含document节点的对象. ( ...