读《设计摸式》-1
来源:互联网 发布:windows10控制面板网络 编辑:程序博客网 时间:2024/06/05 12:44
本人今天开始学习设计模式,以前并无下博客的习惯,但好的习惯应该养成,设计模式是一本经典而优秀的书籍,是每个程序员应该掌握的技能,所以接下来所写的文章将是记录自己学习的历程,更加希望能与别人一起分享自己的学习经验,欢迎大家一起讨论。
引言中看到了有经验的设计者和新手的巨大的区别就是在于两者之间对于设计的理解和熟悉程度,像我们这些新手往往对于软件开发一开始的过程都有种无从入手的感觉,我也厌倦了这种感觉,从今天开始,我应该要努力的成为一个设计者,而不仅仅是一个手敲代码的工作人员,我们也是在从事一项艺术工作,而不是像大家所说的"农民工"。
设计模式这本书的目的就是为了将面向对象软件的设计经验作为设计模式记录下来。
那什么是设计模式呢?
一般来说,设计模式有4个基本要素:1.模式名称(pattern name); 2.问题(problem); 3.解决方案(solution); 4.效果(consequences).设计模式确定了所包含的类和实例,他们的角色,协作方式以及职责分配。
书中的第一个重要模式------SmallTalk MVC的设计模式。
大家都知道MVC的含义是Model, View, Controller.这里复习一下这3个词的意义。 Model是应用对象,View为屏幕上的显示,Controller为定义用户界面对用户的输入方式的响应方式。下面可看下书中的示例:
下面是一个模型和3个视图(省略Controller), 模型中包含了不同的数据,而视图则是以不同的3种方式来显示这些数据,当模型中的数据发生了改变时,便会通知它的视图,视图与模型通信以访问这些数据。所以可以看到箭头都是双向的。
MVC的另一个特征是视图可以嵌套。简单的说我们可以编写一些像CompositeView(复合视图)类去嵌套在View层使用。例如可以写一个符合自己要求的具有分页功能的类,去嵌套相应的视图,从而获得其效果。MVC允许你在不改变视图外观的情况下改变视图对用户输入的响应方式。MVC存在许多的类层次结构以作为辅助,相应的来说,我们随时可以编写不同的类层次结构去辅助我们的模型又或者是视图和控制器,而不会违反了MVC原有的概念。因为他们不会直接影响到MVC的内容。View使用Controller的子类的实例去实现一个特定的响应策略。所以对于想更换不同的相应策略只需用不同的Controller实例去替换即可。当然MVC还使用了很多其他的模式,会随着阅读的越多,而理解到更多的。
设计摸式创建型(Creational), 结构型(Structural),行为型(behavioral). 书中很清楚的描写了各种设计模式之间的关系,但本人不打算在这里说,先留着,等到本人对不同的设计模式有了初步的了解后,再回过来看他们的关系,相信会有一个恍然大悟的感觉。
那么设计模式是怎样解决设计问题的呢?
1. 寻找适合的对象
这个过程包括了类中的对象,以及方法或操作。客户的请求是使对象操作的唯一的方法,操作又是改变对象内部数据的唯一方法。但这里我们必须考虑到对象的内部是已经封装的,不能被直接的访问,内部的表示对于外部是不可见的。我们要了解到一些因素:封装,粒度,依赖关系,灵活性,性能,演化,复用等等,这些因素通常是相互冲突的。我们可写出问题描述,从而挑出名词和动词去创建相应的类和操作,也可以找到系统的协作和职责的关系,或者对现实世界建模等等。设计中的抽象对于产生灵活的设计是至关重要的。
(未完成,会继续更新)
- 读《设计摸式》-1
- 读《设计心理学》-1
- 设计(1) 万用表设计
- 设计模式1 设计原则
- 交互设计[1]--设计心理学
- 设计相关1-设计原则
- c++ 设计摸式之代理模式
- 读Head First设计模式 - 1
- 响应式网页设计与应用(1)
- 设计响应式网站-Bootstrap(1)
- Web响应式设计--学习1
- 响应式布局设计指南和教程(1)--响应式时代的设计历程
- [ 响应式设计 ] 响应式设计入门!
- 【读书分享】读《设计中的设计》有感
- 设计模式-工厂设计模式读感
- 自适应网页设计/响应式Web设计
- 自适应网页设计/响应式Web设计
- 网罗响应式设计前端设计框架
- Android基础
- DotNet 操纵Excel总结
- mysql update不能直接使用select的结果
- 项目架构思想探讨
- axis2学习笔记
- 读《设计摸式》-1
- .Net内联函数说明
- Java实现快速排序
- USACO S1.4 The Clocks
- c++学习笔记三-常见基础问题
- 求救!!
- YUV格式
- 可以有效改进项目管理技能的十个过程
- platform_device 和 platform_driver 驱动管理(转载)