中介者模式
2016-01-05 15:47
239 查看
今天的计划:
14:30 ~ 18:00 工作;
19:00 ~ 21:00 更新BitCasual;
21:00 ~ 22:00 运动;
BitCasual更新计划:
1.重构Lua代码;
2.交替出现不同的种类;
3.State Machine和MsgDispatcher;
Jason Ding代码的坏味道:5 Divergent Change(发散式变化)
我们希望软件能够更容易被修改,毕竟软件怎么说本来也就是软的。一旦需要修改,我们希望能够跳到系统的某一点,只在此处修改。如果做不到这一点. 你就嗅出两种紧密相关的刺鼻味道中的一种了。
如果某个类经常因为再不同的方向上发生变化, Divergent Change就出现了。那么此时修改这个对象分成几个小的类,这么一来每个对象就可以因一种变化而需要修改了。
针对某一外界变化的所有响应修改,都只应该发生再单一类中,而这个新类内所有内容都应该反应此变化。为此,你应该找出某特定原因而造成的所有变化,然后运用Extract Class(提炼类)将他们提炼到了另一个类中。
附上链接5
Divergent Change(发散式变化)
![](http://liangxiegame.com/content/images/2016/01/-----2016-01-05---1-40-34.png)
什么时候用?
1.对象间的交互虽定义明确然而非常复杂,导致一组对象彼此相互依赖而且难以理解;
2.因为对象引用了许多其他对象并与其通讯,导致对象难以复用。
3.想要定制一个分布在多个类中的逻辑或行为,又不想生成太多子类。
转载请注明地址:独立日记
跟踪一个简单的C语言程序的生命周期:
1.信息就是位 + 上下文
hello.c中的每个文本字符是单个字节,每个字节由8位组成,每个位由0和1组成。hello.c中的每个文本对应一个ASCII码。
![](http://liangxiegame.com/content/images/2016/01/-----2016-01-05---2-11-25.png)
以上可得出结论:系统中的所有信息,包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。
2.程序被其他程序翻译成不同的格式
![](http://liangxiegame.com/content/images/2016/01/-----2016-01-05---2-30-28.png)
*预处理阶段: 与处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如#include命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序文本中。结果就得到了另一个C程序,通常是以.i作为文件扩展名。
*编译阶段: 编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。
*汇编阶段: 接下来,汇编器(as)将hello.s翻译成记起语言指令,把这些指令打包成一种叫做可重定位目标陈旭(relocatable object program)的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言指令而不是字符。
&链接阶段: hello程序调用了printf函数,它是每个C编译器都会提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中。连接器(ld)就负责处理这种合并。结果就得到hello文件,它是一个可执行目标文件(或者简称为可执行文件),可以加载到内存中,由系统运行。
3.了解编译系统如何工作有毛用?
*优化程序性能:我们需要了解一些机器代码以及编译器将不同的C语句转化为机器代码的方式。例如,一个switch语句全用if-then-else来代替,是否会提高效率?一个函数调用的开销有多大?while循环比for循环更有效吗?指针引用比数组索引更有效吗?为毛将循环求和的接管放到一个本地变量中,与将其放到一个通过引用传递过来的参数中相比,运行速度要快很多呢?为毛我们只是简单地重新排列一下一个算术表达式中的括号就能让一个函数运行得更快呢?答案都在TM第三章呢,第三章会介绍两种相关的机器语言:IA32和x86-64。IA32是32位的,x86-64是64位的,iPhone
5+ 都是64位的,到时候会介绍编译器怎么把源代码转换成机器语言的。第5章会学习如何简单转换C语言代码,以帮助编译器更好地完成工作,提高C程序的性能。第六章,会介绍存储器系统的层次结构特性,C语言编译器将数组存放在存储器中的方式,以及C程序是如何能够利用这些知识从而更高效地运行。
*理解链接时出现的错误: 我凑,用xcode时候经常遇到链接错误,或者链接警告,为毛?到时候第七章会说。
*避免安全漏洞: 病毒好多是汇编写的(听说的),不过服务器还是客户端都要考虑信息安全的问题。
第一章剩下的有点难,IT小白看不懂。明天再总结。
微信公众号:QWERTeam
14:30 ~ 18:00 工作;
19:00 ~ 21:00 更新BitCasual;
21:00 ~ 22:00 运动;
BitCasual更新计划:
1.重构Lua代码;
2.交替出现不同的种类;
3.State Machine和MsgDispatcher;
Jason Ding代码的坏味道:5 Divergent Change(发散式变化)
我们希望软件能够更容易被修改,毕竟软件怎么说本来也就是软的。一旦需要修改,我们希望能够跳到系统的某一点,只在此处修改。如果做不到这一点. 你就嗅出两种紧密相关的刺鼻味道中的一种了。如果某个类经常因为再不同的方向上发生变化, Divergent Change就出现了。那么此时修改这个对象分成几个小的类,这么一来每个对象就可以因一种变化而需要修改了。
针对某一外界变化的所有响应修改,都只应该发生再单一类中,而这个新类内所有内容都应该反应此变化。为此,你应该找出某特定原因而造成的所有变化,然后运用Extract Class(提炼类)将他们提炼到了另一个类中。
附上链接5
Divergent Change(发散式变化)
写给女票的:
中介者模式:用一个对象来封装一系列对象的交互方式。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。![](http://liangxiegame.com/content/images/2016/01/-----2016-01-05---1-40-34.png)
什么时候用?
1.对象间的交互虽定义明确然而非常复杂,导致一组对象彼此相互依赖而且难以理解;
2.因为对象引用了许多其他对象并与其通讯,导致对象难以复用。
3.想要定制一个分布在多个类中的逻辑或行为,又不想生成太多子类。
转载请注明地址:独立日记
CSAPP(深入理解计算机系统):
前言:Unix、Windows、Linux相对于iOS、Unity等应用程序来说肯定是比较大型的软件,就是说操作系统也是软件,有很多值得借鉴的设计,另外了解了操作系统也会有利于提高应用程序的性能,提高开发能力,知乎上有很多大神推荐csapp,软件工程师必看。跟踪一个简单的C语言程序的生命周期:
/* * hello.c */ #include <stdio.h> int main() { printf("hello,world\n"); }
1.信息就是位 + 上下文
hello.c中的每个文本字符是单个字节,每个字节由8位组成,每个位由0和1组成。hello.c中的每个文本对应一个ASCII码。
![](http://liangxiegame.com/content/images/2016/01/-----2016-01-05---2-11-25.png)
以上可得出结论:系统中的所有信息,包括磁盘文件、存储器中的程序、存储器中存放的用户数据以及网络上传送的数据,都是由一串位表示的。区分不同数据对象的唯一方法是我们读到这些数据对象的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、字符串或者机器指令。
2.程序被其他程序翻译成不同的格式
unix> gcc - o hello hello.c
![](http://liangxiegame.com/content/images/2016/01/-----2016-01-05---2-30-28.png)
*预处理阶段: 与处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如#include命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入到程序文本中。结果就得到了另一个C程序,通常是以.i作为文件扩展名。
*编译阶段: 编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。
*汇编阶段: 接下来,汇编器(as)将hello.s翻译成记起语言指令,把这些指令打包成一种叫做可重定位目标陈旭(relocatable object program)的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言指令而不是字符。
&链接阶段: hello程序调用了printf函数,它是每个C编译器都会提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o程序中。连接器(ld)就负责处理这种合并。结果就得到hello文件,它是一个可执行目标文件(或者简称为可执行文件),可以加载到内存中,由系统运行。
3.了解编译系统如何工作有毛用?
*优化程序性能:我们需要了解一些机器代码以及编译器将不同的C语句转化为机器代码的方式。例如,一个switch语句全用if-then-else来代替,是否会提高效率?一个函数调用的开销有多大?while循环比for循环更有效吗?指针引用比数组索引更有效吗?为毛将循环求和的接管放到一个本地变量中,与将其放到一个通过引用传递过来的参数中相比,运行速度要快很多呢?为毛我们只是简单地重新排列一下一个算术表达式中的括号就能让一个函数运行得更快呢?答案都在TM第三章呢,第三章会介绍两种相关的机器语言:IA32和x86-64。IA32是32位的,x86-64是64位的,iPhone
5+ 都是64位的,到时候会介绍编译器怎么把源代码转换成机器语言的。第5章会学习如何简单转换C语言代码,以帮助编译器更好地完成工作,提高C程序的性能。第六章,会介绍存储器系统的层次结构特性,C语言编译器将数组存放在存储器中的方式,以及C程序是如何能够利用这些知识从而更高效地运行。
*理解链接时出现的错误: 我凑,用xcode时候经常遇到链接错误,或者链接警告,为毛?到时候第七章会说。
*避免安全漏洞: 病毒好多是汇编写的(听说的),不过服务器还是客户端都要考虑信息安全的问题。
第一章剩下的有点难,IT小白看不懂。明天再总结。
微信公众号:QWERTeam
![](http://liangxiegame.com/content/images/2015/12/qrcode_for_gh_274c473a11b5_430--1-.jpg)
相关文章推荐
- 典型Top K算法
- Java 生成本文文件的时候,Dos格式转成Unix格式
- linux本机root账户无法登录,但是远程ssh可登录
- UIBootatrap:是由AngularJS UI团队编写的纯AngularJS实现的Bootstrap组件
- Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能
- 手机端解决onkeyup事件
- Tomcat服务器下部署项目几种方式
- 解决Linux服务器 FIN_WAIT2 连接过多的问题
- 十步完全理解SQL
- 转载:寒门再难出贵子
- leetcode-Consecutive numbers
- Coldfusion8 读取HASH工具
- iOS9的http请求问题
- pixel像素与物理像素
- Android ActionBar 讲解
- vs2010编译lua-5.3.2
- Qt在Windows下的三种编程环境搭建
- python 2.7.11 安装pipy包管理器
- 欢迎使用CSDN-markdown编辑器
- PDO防注入原理分析以及使用PDO的注意事项