设计模式的定义和分类心有玲曦遇奇缘

设计迷失的出现可以让开发人员站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的设计和开发没以便于开发出具有更好的灵活性和可拓展性。也更易于复用的软件系统,

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解并且提高代码的可靠性。设计模式是一种用于对系统中不断重现的设计问题的解决方案进行文本化的技术,也是一种共享专家设计经验的技术。

GoF对设计模式的定义如下:

设计模式是指在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该解决方案描述了对象和类之间的相互作用

2、设计模式的基本要素

(1)模式名称

模式名称通过一两个关键词来描述模式的问题、解决方案和效果,以便用户更好地理解设计模式并便于开发人员之间的交流。绝大多数数模式都是跟据其功能或者模式结构来命名的,在学习设计模式时候,首先应该准确的记忆该设计模式的中引文模式名,在已有的类库中,很多使用了设计模式的类名通常包含了使用的设计模式的名称,如果一个类名称为XXXAdapter,则该类是一个适配器类,在设计时使用了适配器模式,如果一个类名称为XXXFactory,则该类是一个工厂类,一定包含了一个工厂方法用于返回一个类的实例对象。

(2)问题

问题描述了应该在什么时候使用设计模式,包含了原始设计中存在的问题以及问题存在的原因。这些问题有些事特定的设计问题,如怎样使用对象封装状态或者使用对象标识算法等,也可能是系统中存在不灵活的类或对象结构导致系统的可维护性较差,有时候,在模式的问题藐视部分可能会包含使用该设计模式时必须满足的一系列先决条件,如在使用桥接模式时系统中的类必须存在两个独立变化的维度,在使用组合模式的时候系统中必须存在整体和部分的层次结构等。在对问题进行描述的同时实际上确定了模式所对应的使用环境以及模式的使用动机

(3)解决方案

解决方案描述了设计模式的组成成分,以及这些组成成分之间的相互关系,各自的职责和协作方式,模式时一个通用的模板,它可以应用于各种不同的场合。解决方案并不描述一个特定而具体的设计或者实现,而是提供设计问题的抽象描述和怎样使用一个具有一般意义的元素组合(类或者对象做组合)来解决这个问题。在学习设计模式的时候,解决方案通过类图和核心代码来加以说明,对于每个设计模式,必须掌握其类图,理解类图中每一个角色的意义以及他们之间的关系。并且需要掌握实现该设计模式的一些核心代码,以便于在实际卡发中合理使用设计模式。

(4)效果

3、设计模式的分类

(1)根据目的分类

①创建型模型(Creational)

此类模式主要用于创建对象,GoF提供了5种创建模型,分别是工厂方法模式(FactoryMethodPattern)、抽象工厂模式(AbstractFactoryPattern)、建造者模式(BuilderPattern)、原型模式(PrototypePattern)和单例模式(SingletonPattern)。

②结构性模式(Structural)

此类设计模式主要用于处理类和对象的组合。GoF提供了7种结构型模型,分别是适配器模式(AdapterPattern)、桥接模式(BridgePattern)、组合模式(ConpositePattern)、装饰模式(DecoratorPattern)、外观模式(FacadePattern)、享元模式(FlyweightPattern)和代理模式(ProxyPattern)。

③行为模型模式(Behavioral)

此类设计模式主要用于描述类或者对象如何交互和怎样分配职责,GoF提供了11种行为型模型。分别是职责链模式(ChainofResponsibilityPattern)、命令模式(Command

Pattern)、解释器模式(InterpreterPattern)、迭代器模式(IteratorPattern)、中介者模式(MediatorPattern)、备忘录模式(MementoPattern)、观察者模式(ObserverPattern)、状态模式(StatePattern)。策略模式(StrategyPattern)。模板方法模式(TemplateMethodPattern)和访问者模式(VisitorPattern).

423种设计模式

Adapter适配器模式—–将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

Bridge桥接模式——将抽象部分与它的实现部分分离,使它们都可以独立地变化。

Builder生成器模式——将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

ChainofResponsibility职责链模式——为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

Command命令模式——将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

Composite组合模式——–将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。

Decorator装饰模式——动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。

Facade外观模式——为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

FactoryMethod工厂方法模式——定义一个用于创建对象的接口,让子类决定将哪一个类实例化。FactoryMethod使一个类的实例化延迟到其子类。

Flyweight享元模式——运用共享技术有效地支持大量细粒度的对象。

Interpreter解释器模式——给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

Iterator迭代器模式—–提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

Mediator中介者模式——用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

Memento备忘模式——在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。

Observer观察者模式:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

Prototype原型模式——用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

Proxy代理模式:为其他对象提供一个代理以控制对这个对象的访问。

Singleton单态模式——保证一个类仅有一个实例,并提供一个访问它的全局访问点。

State状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

Strategy策略模式——定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

TemplateMethod模板方法模式——定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

Visitor访问者模式—–表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

需要注意的是这23中设计模式并不是独立存在的,很多设计模式之间存在着联系,例如在访问者模式中操作对象结构中的元素通常需要使用迭代器模式。在解释器模式中定义终结符表达式和非终结符表达式时候可以使用组合模式,此外,还可以通过组合两个和多个模式来设计同一个系统,在充分发挥每一个模式优势的同时使他们可以协同工作,完成一些复杂的设计。

5设计模式的优点

设计模式是从许多优秀的软件系统中总结出来的、成功的、能够实现可维护性的设计方案,开发人员使用这些方案能够避免做一些重复的工作,而且可以设计出高质量的软件系统,具体来说没设计模式的主要优点如下:

(1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员使用,它提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂。使不同编程语言的开发和设计人员可以通过设计模式来交流系统设计方案,每一个模式都对应一个标准的解决方案,设计模式可以降低开发人员理解系统的复杂度,

(2)设计模式让人们可以更加简单方便的复用成功的设计和体系结构,将已经证实的技术表述成设计模式也可以使新系统的开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免导致不可重用的设计方案。

(3)设计模式使得设计方案更加灵活,且易于修改,在很多设计模式中广泛使用了开闭原则、依赖倒转原则、迪米特法则等面向对象设计原则,使得系统具有较好的可维护性,真正实现了可维护性的复用,在软件开发中合理只用设计模式,可使系统中的一些组成部分在其他系统中得以重用,而在此基础上进行二次开发很方便。正因为设计模式具有该有点,因此在.NETFrameworkSDK、NHibernate、NUnit等类库和框架的设计中大量使用了设计模式。

(4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本,设计模式时一些通过多次实践得以证明的行之有效的解决方案,这些解决方案通常是针对某一类问题的最佳设计方案,因此,可以帮助设计人员构造优秀的软件系统,并且可以直接重用这些设计经验,节省系统设计成本。

(5)设计模式有助于初学者更深入的理解面向对象思想,一方面可以帮助初学者更加方便的阅读和学习现有类库与其他系统中的源代码,另一方面可以提高软件设计水平和代码质量。

THE END
1.设计定义,Definitionofdesign,音标,读音,翻译,英文例句,英语词典补充资料:工业设计定义 1970年国际工业设计协会ICSID(International Council of Societies of Industrial Design) 为工业设计下了一个完整的定义: "工业设计,是一种根据产业状况以决定制作物品之适应特质的创造活动。适应物品特质, 不单指物品的结构, 而是兼顾使用者和生产者双方的观点, 使抽象的概念系统化, 完成统一http://dictall.com/indu/024/0232732195E.htm
2.设计定义的英文设计定义翻译设计定义英语怎么说海词词典,最权威的学习词典,专业出版设计定义的英文,设计定义翻译,设计定义英语怎么说等详细讲解。海词词典:学习变容易,记忆很深刻。http://dict.cn/%E8%AE%BE%E8%AE%A1%E5%AE%9A%E4%B9%89
3.设计的定义我国《高级汉语大辞典》中解释设计是:“按照任务的目的和要求,顶先定出工作方案和计划,绘出图样为解决这个问题而专门设计的图案。” 我国在1999年出版的《授予博士硕士学位和培养研究生的学科专业简介》一书中,对“设计艺术”的定义为:“设计艺术是一门多学科交叉的、实用性的艺术学科,其内涵是按照文化艺术与科学技http://www.szniushi.com/h_content_lkl
4.设计的定义设计是一种学科的探究,是为了创造有实践效用的新事物的探究。它包括对一个定义不良情境的探索、发现和解决一个或多个问题、具体说明导致有效改变的途径。设计在很多领域实行,并根据设计者和所设计的事物类型不同而变化。设计需要理性和直觉的平衡,行动的动力和对所采取行动的反思能力(Rowland,1993)。https://www.douban.com/group/topic/4959095
5.「设计概论」设计的定义设计规则前言:人类一切创造性活动和造物活动都可以称为设计,这是从广义角度去理解设计的定义。从狭义角度理解设计的定义,设计就是构想和解决问题的过程。应以人为本,通过系统化的方法满足消费者的市场需求,进而产生功能价值与审美价值。 除了广义与狭义的设计定义,处在不同时期不同的人站在的角度和立场均不同,产生的观点是https://www.shangyexinzhi.com/article/3199946.html
6.室内设计的定义王猛设计师从定义上面讲室内设计是指为满足一定的建造目的(包括人们对它的使用功能的要求、对它的视觉感受的要求)而进行的准备工作,对现有的建筑物内部空间进行深加工的增值准备工作。目的是为了让具体的物质材料在技术、经济等方面,在可行性的有限条件下形成能够成为合格产品的准备工作。需要工程技术上的知识,也需要艺术上的理论https://www.shejiben.com/sjs/509596/log-24769-l116692.html
7.艺术设计的定义艺术设计的定义老树开花 精选回答 设计艺术是实用艺术,它以艺术为设计的要求和要素。在人造物系统中,广泛的涉及人的衣、食、住、行、用的各个方面,是人造物系统的重要组成部分。它以艺术的表现方式使不同的设计品类呈现不同的艺术形态。其本质是实用与审美的结合。 扩展资料 具有物质和非物质两个层面,在物质https://edu.iask.sina.com.cn/jy/9LanTst6y8.html
8.建筑设计的定义是什么建筑设计的定义建筑设计是指为满足一定的建造目的(包括人们对它的使用功能的要求、对它的视觉感受的要求)而进行的设计,它使具体的物质材料在技术、经济等方面可行的条件下形成能够成为审美对象的产物。在广义上,它包括了形成建筑物的各相关设计。按设计深度分,有建筑方案设计、建筑初步设计、建筑施工图设计。按设计内容https://www.hxsd.tv/wenda/6446/
9.工业设计是什么定义工业设计可以说是一门应用艺术,应用美学概念来提高产品的亲和力和实用性。工业设计是个比较大的学问。我们对工业设计了解多少?花点时间想想什么是工业设计。答案清楚吗?什么是工业设计呢?下面深圳工业设计小编带您了解什么是工业设计: 工业设计是基于工程、美学和经济学的工业产品设计。工业设计分为四大类:产品设计、环境http://www.yunbo-design.com/gsdt/xydt_1737_3188.html
10.设计模式的定义与分类设计模式定义,设计模式成分和分类设计模式的定义与分类 开发人员和代码打交道是最多的,写代码就离不开设计模式。什么是设计模式?设计模式在笔者看来就是写代码的套路,同样的功能实现,100个人有一百种写法,但是代码写的好坏,性能如何,可读性、可扩展性、可维护性、可重用性、安全性等都是不一样的。设计模式是属于代码层面的规划设计,不属于架构https://blog.csdn.net/weixin_40141628/article/details/132129468
11.设计互说:作为设计师的他们,如何定义边界?“设计互说”第一期,我们邀请到两位嘉宾:室内设计师 Cun Design 创始人 - 崔树,MAT 超级建筑事务所创始合伙人、主持建筑师 - 张淼,以及特约观察员:光石普罗照明设计有限公司联合创始人 - 富丽,围绕“设计的边界”这一话题进行分享和交流,嘉宾双方与主持人互动的过程中,激发了许多有趣、有料的思考。 https://www.jzda001.com/index/index/details?type=1&id=5942
12.一文搞懂:设计变更单工程签证单工程联络单及工程洽商会签的(一)设计变更定义 设计变更是对原设计图纸进行的修正、设计补充或变更,由设计院提出并经建设单位认可后发致施工单位及其他相关单位;或由建设单位提出由设计院签字认可,再由建设单位下发。 一般包括由原设计单位出具的设计变更通知单和由施工单位征得由原设计单位同意的设计变更联络单两种。 http://www.xartvu.sn.cn/html/037007/1655834937643.html