1引述—为什么会有设计模式
在项目的开法过程中,我们总会有这样的感觉:碰到的问题似曾相识,而且自己曾经已经解决,但是就是不确定在什么地方碰到或者是怎么解决的,原因就是我们没有把设计经验积累和提取出来供以后使用。如果能做到复用以前的经验,那么在碰到同类的问题时就不用重新花大力气去解决它,所以说设计经验是非常珍贵的。
设计模式是设计经验的重要价值的体现。设计模式使人们可以更加复用的成功的设计和体系结构,它并不是什么新的领域或者新的概念,它是对经验的总结,方便设计者更好的完成系统的复用从而更好更快的完成系统的设计。
2 设计模式
2.1设计模式的概念
设计模式描述了面向对象开发过程中不断重复发生的问题以及该问题的解决方案。它是在特定情景下解决一般设计问题类和相互通信对象的描述。
2.2 模式的基本要素
1模式名称:用来描述模式的名称,通过模式名可以快速联想到该模式的要解决的问题,解决方案及效果。
2问题:设计模式要解决的问题,什么时候应该使用该模式。
3解决方案:抽象描述该问题和提供一个一般元素的组合(类和对象)来解决这个问题。
4效果:模式使用的效果及模式使用应该权衡的东西。
3设计模式分类
设计模式在粒度和抽象层次各部相同,可以通过目的准则即设计模式是用来完成什么工作的将模式分为:创建型(Creational)、结构性(Structural)和行为型(Behavioral)。
3.1创建型(creational)模式
创建型模式与对象的创建有关,它抽象了实例化的过程,帮助一个系统独立于如何创建组合和表示这些对象。以下是GOf提到的五种创建型设计模式:
抽象工厂模式(AbStract Factory):提供一个创建一系列相关或相互依赖对象的借口,无需制定他们具体的类。
建造模式(Builder):将一个复杂的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象
单例模式(Singleton):保证一个类仅有一个实例,并提供它的全局访问点
工厂方法模式(Factory Method):定义一个用于创建对象的借口,让子类决定哪个类将被实例化,它使一个类的实例化延迟到子类。
3.2结构型(Structural)模式
结构型设计模式涉及到如何组合类和对象获得更大的结构,它是描述对象与对象进行组合以获得新的功能的方法。以下7种GOF中提到的结构型设计模式:
适配器模式(Adapter):将一个类的接口转换成客户希望的另一个类的借口,适配器模式使得原本由于借口不兼容而不能在一起工作的类在一起工作。
桥接模式(Bridge):将抽象与实现部分分离,使他们都可以独立变化
组合模式(Composite):将对象组合成树形结构以表示“部分-整体”层次结构
装饰模式(Decorator):动态的给一个对象添加一些额外的职责
门面模式(Facade):为子系统的一组借口提供一致的访问界面,它定义一个高层借口使得子系统更加容易使用。
享元模式(Flyweight):运用共享技术有效的使用大量细颗粒度的对象。
代理模式(Proxy):为其他对象创建一个代理控制对该对象的访问。
3.3行为型(Behavioral)模式
行为型设计模式是类或对象怎样交互职责怎么样分配进行描述,它描述类或对象的同时也描述他们之间的通信方式。以下11种GOF中提到的行为型设计模式:
责任链模式(Chain ofResiponsibility):为解除请求的发送者和接收之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到一个对象处理它。
命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作。
迭代子模式(Iterator):提供货一个方法顺序访问你哥聚合对象中的各个元素,而又不暴露改对象的内部结构。
终结者模式(Mediator):也叫调停者模式,用一个中介对象封装一系列对象的交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
备忘录模式(Menento):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将对象回复到保存的状态。
观察者模式(Obeserver):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动刷新。
状态模式(State): 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类。
策略模式(Strategy):定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于是用它的客户。
访问者模式(Visitor):表示一个作用于某个对象结构中的各个元素的操作。它使你可以再不改变各元素类的前提下定义作用于这些元素的新操作。
解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义哥解释器,该解释器可以使用该表示来解释语言中的句子。
模版方法模式(Template Method):定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,它使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
4学习设计模式需要理解的一些概念
学习设计模式时,掌握下面几节的东西将非常有帮助,也是应该去掌握和理解的,这里面只提个大概,以后将会详述。在平时中开发过程中其实有很多地方都用到了设计模式的思想,只是没有去总结,学习设计模式或者解决某类重复性的问题可以先想一下我们要解决的问题与这些模式有没有对应,这个模式是不是应该为此类问题提供解决方案,久而久之就会熟练掌握设计模式,即将设计模式与实际想结合(这些话是想对自己说的)。
4.1封装 继承 多态
封装、继承、多态是面向对象的三大特性,每个特性都是需要理解和掌握的,设计模式主要是针对面向对象语言描述的(当然面向过程语言也可以用到这些设计模式的,而且也可以用过程化语言区模拟面向对象的特性),对这些概念的理解将会事半功倍,尤其是多态。
4.2 类与类之间的关系
看得懂UML 图,至少是类图,理解类与类之间的 依赖、 关联、聚合、合成、泛化等关系。
4.3 面向对象设计的原则
面向对象设计主要有以下几个原则:
单一责任原则SRP(SingleResponsibility Principle):一个类/对象只有一个引起变化的原因。换言之,一个类只有一个类型责任。
开放封闭原则OCP(Open ClosedPrinciple):软件实体对扩展开放,对修改封闭。
里氏替换原则LSP(LiskovSubstitution Principle):子类的实例能够替换其父类的实例。
接口分离原则ISP(InterfaceSegregation Principle):使用多个专门的接口比使用单一的总接口要好。一个类对另一个的依赖性建立在最小的接口上。
依赖倒置原则DIP(DependencyInversion Principle):依赖抽象不要依赖具体实现。
其他还有一些原则,就不一一列举,设计各个设计模式的原型都可以是这几个原则的体现,他们这个原则的衍生,是不是感觉有点像老子说的:“天生道,道生一,一生两仪,两仪生四象,四象生八卦,八卦生万物”感觉啦!
设计模式的文章主要是学习《设计模式可复用面向对象软件的基础》和《Java与模式》的总结,我将这两本书的电子书也上传到csdn中,下面是下载地址:
《设计模式可复用面向对象软件的基础》:http://download.csdn.net/detail/yuxuan1215/4736876
《Java与模式》 :http://download.csdn.net/detail/yuxuan1215/4736946
分享到:
相关推荐
这些基础知识构成了平面设计的核心,设计师需要掌握这些概念并灵活运用,以创造出既美观又有效传达信息的设计作品。在实际设计中,还需要考虑受众、目的、审美趋势和品牌形象等多个因素,以确保设计的成功。
AI基础知识图文教程--入门知识学习 AI基础知识图文教程是为了帮助初学者快速入门AI相关知识,而本教程的重点是 Illustrator 软件的使用和矢量图形设计。下面是本教程的知识点概况: 一、Illustrator 简介及应用...
在第07章“零件轮廓图综合练习”中,学习者将有机会接触到一系列实际的零件设计案例,从而提高自己的二维绘图和三维建模技巧。 在这一章中,重点知识点包括: 1. **基本绘图工具**:学习如何使用直线、圆弧、矩形...
"标准轮廓匹配"这个主题涉及到图像处理、模式识别和机器学习等多个IT子领域,下面将详细探讨这些知识点。 1. **图像处理基础**: - 图像由像素组成,每个像素代表图像的一个小区域的色彩和亮度信息。 - 在二值化...
"AI基础知识图文教程---入门知识学习" 从给定的文件信息中,我们可以生成以下重要知识点: 一、Illustrator 简介及应用领域 * Illustrator 是美国 Adobe 公司出品的重量级矢量绘图软件,是出版、多媒体和网络图像...
目标是通过学习,掌握数控铣削轮廓的工艺设计和编程方法,包括外轮廓、内轮廓以及复杂轮廓的加工。 ### 技能目标 1. 掌握外轮廓铣削的编程技术,理解刀具半径补偿的基本概念,以便能够熟练运用在编程中。 2. 学习...
### 模式识别实验指导知识点解析 #### 一、Bayes分类器设计 **知识点概述:** 本实验指导书旨在帮助学生深入理解Bayes分类器的设计原理及其在实际中的应用。通过具体的实验步骤,学生可以亲自动手实现分类器,并...
综上所述,轮廓加工是一项集工艺设计、编程技巧和设备操作于一体的综合技术,掌握这些知识和技能,能够有效地提升数控铣削加工的效率和精度,满足各种复杂零件的生产要求。通过实际操作和反馈,不断优化加工流程,是...
总之,这个毕业设计全面展示了字符识别与模式识别的结合,涵盖了从理论知识到实际应用的全过程。通过这个项目,学生不仅可以深入理解模式识别的基本原理,还能掌握字符识别系统的构建技巧,为将来在人工智能、计算机...
6. **软件工程原则**:代码轮廓图还可以帮助检查是否遵循了良好的软件工程实践,如单一职责原则(SRP)、开闭原则(OCP)等,以及模块化和分层设计。 7. **Spatie Code Outliner**:根据压缩包中的文件名,Spatie ...
本文将详细介绍如何使用ARCOCAD进行面轮廓测量,包括导入CAD模型、采点方法、测量路径规划、输出设置、点元素测量、钣金厚度补偿以及曲线测量等方面的知识。 1. CAD模型导入与数模对齐 在开始测量前,首先需要导入...
这些基础知识构成了平面设计师必备的技能框架,理解和掌握这些概念对于创作出引人注目且有效的设计作品至关重要。无论是商业广告、品牌形象塑造还是艺术表达,平面设计都在日常生活中扮演着不可或缺的角色。
【毕业设计:基于深度学习的人流量检测系统】 在当今信息化社会,人流量的精确检测对于城市规划...通过这样的项目,学生可以深入理解并掌握如何将理论知识应用于实际问题解决,为未来在IT行业的职业发展打下坚实基础。
随着计算机辅助设计技术的不断进步,这些知识点的重要性只会越来越显著,对于从事CAD系统开发和工程设计的专业人员来说,掌握这些知识点是必要的,也是实现智能CAD系统创新和提高设计质量的基础。
- **双重斜坡屋顶**:此类型屋顶需要在绘制模式下绘制两层屋顶轮廓,设置截断高度,通过"屋顶属性"工具处理洞口,如果两层坡度相同,使用"连接"工具消除连接线。 - **编辑迹线屋顶**:可以使用“编辑迹线”命令...
验证码的主要目的是防止自动化程序(如机器人)进行非法操作,而机器学习的目的是让计算机通过学习数据来识别模式,从而能够自动解决验证码识别的问题。 验证码识别通常涉及以下几个关键知识点: 1. **图像处理**...
Catia三维建模是计算机辅助设计(CAD)领域中的一个重要部分,本PPT学习教案旨在帮助学习者掌握Catia三维建模的基础知识和操作技能。 一、实体造型的两种模式 在Catia三维建模中,实体造型有两种模式:第一种模式...
通过这个项目,学生不仅可以掌握Flash中的基本绘图技巧,还能培养创新思维和设计能力,为后续更复杂的网页和动画设计打下坚实基础。在实际授课中,除了理论讲解,还包括实践操作和课外作业,确保学生能够熟练运用所...