========================
软件设计技术与软件质量任务
模式是种知识
设计模式是一种提高软件质量(三个中的一个)的设计“知识”; 是知识,有自己的专业(人员)和任务
软件质量
模式知识何为知识,提高软件质量的原理是什么? 以MVC特定的结构模式为例,M V C的划分 不是人为的,是有一定客观性;即使可以人为划分构件,约定专职构件,团队通用,也是提高开发维护性,从 而达到提高软件(可维护性)质量。
其它种类的“模式”,提高软件何种质量,以及原理是什么?
学习设计模式的“模式”
没有人一开始能看懂所有软件设计模式,甚至经历了数个项目的人也未必能。但是,软件模式本身也存在某种“模式”,从一个已知的模式推知另一个模式的设计用意,从而快速掌握另一种模式。简单的说,软件设计模式是大规模软件设计实践总结到的理论,而在此之上依然存在一种更通用的理论。
建筑设计模式——房子布局的决策规则
设计模式其实就是一种复用的“库”,“模式”概念本身就有重复的涵义。但是它跟复用得的代码库(code library)不同,代码库复用的是通用的指令和数据,设计模式复用的是一种【设计策略的选择】,是一个动作,决策动作的复用。举个例子,代码库就像建筑中的钢筋水泥,设计模式就是房子布局的决策规则,如北半球的房子“坐北向南”的房子较舒适,坐北向南就是设计模式,它是针对一个开发任务(例如舒适的房子的采光)的最佳设计决策规则。
只有经历过建筑设计,才能体会建筑任务和建筑设计模式真正的涵义和意义;同样,只有经历软件项目设计,才能更好理解软件设计模式。
设计模式可以怎样讲解?
设计模式是指可复用的设计方法(设计和技术实现不同),DP的讲解,第一讲明某【DP针对哪种具体的开发任务】,例如单例模式用于构件一次性初始化;其次,讲明此DP的优益的地方。
模式知识的工具性和具体任务
设计模式好比帮助完成任务的工具,【任务】对我们来说更直观,有价值,【工具】其次。例如螺丝刀和水果刀,作为用户,我们关心的螺丝上墙,苹果削皮。
任务为工具设计和了解提供动力,工具则为更好施展任务(相关任务)提供了效率
DP被分为创建类、结构类和行为类。故此可以DP针对具体(计算任务)设计中的三大类问题 可以说,水果刀(螺丝刀)和苹果削皮(螺丝上墙)是独立的,也是高度相关的。对工具的了解也有利于对任务的了解。
JS的特性就是水果刀特性,离不开任务特定性质。
模式是抽象的
" 坐北向南" 不如水泥石灰 ,模式终究是种理论,不是技术 可复用的设计决策知识,是抽象的 模式知识解决是抽象的设计问题,例如创建模式中,对象创建方式问题,不是创建技术的问题 Facade模式,与jQuery的$("selector"),解决浏览器兼容问题 设计模式是软件工程知识——软件架构中对象创建方式、框架静态结构和组合通信行为模式,不是像JS那样的技术知识 为了完成复杂应用计算,对象作为计算任务单元,一定有一个创建的过程和事务;而复杂应用必定有一定的结构,组成元素之间通过通信协作完成计算。这是三种设计模式的原因。
软件设计难题,不是软件技术开发难题
一个模式就是一个可重用的方案,可应用于在软件设计中的常见问题 - 每一个设计模式都聚焦于一个面向对象的设计难题或问题——对象创建方式,程序架构设计安排(结构与通信)
技术问题是很具体的,例如如何操作DOM,设计问题,是计算对象创建,计算任务结构安排这样的问题
三种设计模式
创建型设计模式
创建型设计模式关注于对象创建的机制方法,通过该方法,对象以适应工作环境的方式被创建。基本的对象创建方法可能会给项目增加额外的复杂性,而这些模式的目的就是为了通过控制创建过程解决这个问题。
属于这一类的一些模式是:构造器模式(Constructor),工厂模式(Factory),抽象工厂模式 (Abstract),原型模式 (Prototype),单例模式 (Singleton)以及 建造者模式(Builder)。
结构设计模式
结构模式关注于对象组成和通常识别的方式实现不同对象之间的关系。该模式有助于在系统的某一部分发生改变的时候,整个系统结构不需要改变。该模式同样有助于对系统中某部分没有达到某一目的的部分进行重组。
在该分类下的模式有:装饰模式,外观模式,享元模式,适配器模式和代理模式。
行为设计模式
行为模式关注改善或精简在系统中不同对象间通信。
行为模式包括:迭代模式,中介者模式,观察者模式和访问者模式。