`
yuxuan1215
  • 浏览: 14155 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

设计模式轮廓及学习设计模式需要掌握的知识

 
阅读更多

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

分享到:
评论

相关推荐

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    然而学习设计模式的过程却是痛苦的,从阅读设计模式的圣经——GoF的《设计模式:可复用面向对象软件的基础》时的枯燥、苦闷、茫无头绪,到有一天突然有一种顿悟;自己去实现GoF的23中模式时候的知其然不知其所以然,...

    C_设计模式(23种设计模式)

    C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计...

    Gof设计模式设计模式设计模式PDF

    学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料学习设计模式好的资料

    软件设计模式知识点

    软件设计模式知识点

    设计模式精解-学习设计模式的好资料

    学习设计模式的资料,书中阐述了作者对设计模式的理解以及在程序设计中遇到问题该用什么样的模式去解决。

    23种设计模式知识要点.zip

    23种设计模式知识要点.zip"是一份关于设计模式的学习资料,它包含了23种常用的设计模式,旨在帮助软件开发人员更好地理解和运用设计模式来提高软件的质量和可维护性。 这份学习资料以压缩包的形式呈现,文档分别介绍...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...

    C#设计模式_C#设计模式_

    C# 设计模式.pdf 文档。无论您是新手,还是老手,本教程都值得一读。对于那些具有丰富的开发经验的开发人员,学习设计模式有...对于那些经验不足的开发人员,学习设计模式有助于通过一种简单快捷的方式来学习软件设计。

    设计模式精解- GoF 23种设计模式解析附C++实现源码

    一直想把自己的学习经验以及在项目中的应用经历拿出来和大家共享,却总是下不了这个决心:GoF的23种模式研读、总结也总需要些时日,然而时间对于我来说总是不可预计的。 之所以下了这个决心,有两个原因:一是Robert的...

    设计模式之美—学习笔记

    设计模式之美—学习笔记,纯手打,学习极客时间课程得到。 如有意见或建议,欢迎联系,一起学习讨论。

    java设计模式pdf

    java设计模式,java设计模式,java设计模式,java设计模式,java设计模式,java设计模式,java设计模式,java设计模式,

    您的设计模式,我们的设计模式 java设计模式

    您的设计模式我们的设计模式,简单明了的设计模式是设计模式学习必备的书籍

    设计模式精解 设计模式精解

    设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式设计模式 设计模式精解设计模式精解设计模式精解...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...

    深入浅出设计模式 完整扫描版

     所有章节都是先通过具体的示例讲解为什么需要使用某个设计模式,然后讲解该模式的实现原理,最后再通过详细的示例或对很多开源框架进行分析,加深读者对设计模式的理解。  《深入浅出设计模式》适用于中、高级...

    高清晰完整版设计模式,模式学习的经典书籍

    高清晰完整版设计模式,模式学习的经典书籍。 PDF格式,通过通俗易懂的方式教你学习模式 本资源有两个压缩包,需要全部下载才能解开

    研磨设计模式带书签完整版228M.7z.002

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    研磨设计模式带书签完整版228M.7z.001

    中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。...

    设计模式学习 设计模式学习

    式学习,23中设计模式 设计模式之禅设计模式学习,23中设计模式 设计模式之禅 设计模式学习,设计模式之禅

Global site tag (gtag.js) - Google Analytics