`
oxidy
  • 浏览: 162647 次
  • 性别: Icon_minigender_1
  • 来自: 吉林长春
社区版块
存档分类
最新评论

设计模式概念[转载]

阅读更多

在面向对象的编程中,软件编程人员更加注重以前的代码的重用性和可维护性。

设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

一般而言,一个模式有四个基本要素

1. 模式名称(pattern name) 一个助记名,
2. 问题(problem) 描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。

3. 解决方案(solution) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的 设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。

4. 效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要 意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性 或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。

一些基本的设计模式

Abstract Factory :提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

Adapter :将一个类的接口转换成客户希望的另外一个接口。A d a p t e r模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

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

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

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

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

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

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

Facade :为子系统中的一组接口提供一个一致的界面, F a c a d e模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

Factory Method :定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。

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

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

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

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

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

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

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

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

Singleton :保证一个类仅有一个实例,并提供一个访问它的全局访问点。

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

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

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

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

原文地址

分享到:
评论

相关推荐

    head first 设计模式

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

    java设计模式CatalogDAOFactory是典型的工厂方法

    以及proxy模式,proxy模式主要用来授权用户对forum的访问,因为访问forum有两种人:一个是注册用户 一个是游客guest,那么那么相应的权限就不一样,而且这个权限是贯穿整个系统的,因此建立一个proxy,类似网关的概念,可以...

    asp.net知识库

    从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 ...

    数据库模型设计.doc

    下面让我们来逐一介绍这四种主要设计模式—— (一)主扩展模式 连载之2 原创:胖子刘(转载请注明出处及作者,谢谢。) (一)主扩展模式 主扩展模式,通常用来将几个相似的对象的共有属性抽取出来,形成一个"公共...

    那群男人酒店管理系统(Java)

    里面代码没有用到设计模式等概念,但使用该用的技术都用了 比如swing synth thread, 新手学习入门可以看看。 安装说明: 安装之后的默认目录在 D:\那群男人酒店管理系统 安装完后请记得附加数据库 数据库文件...

    Java版水果管理系统源码-AndroidGenericFramework:Android通用框架

    Vlissides这四位大牛在讨论设计模式中的观察者模式时的想法;Trygve Reenskaug在1979年5月的时候发表了一篇文章叫做Thing-Model-View-Editor,这篇文章中虽然没提到Controller,但是他提到的Editor就是非常接近这个...

    nlp with PyTorch - 2019.zip

    •了解用于构建生产NLP系统的设计模式 作者:python测试开发_AI命理 链接:https://www.jianshu.com/p/001938f92fdb 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    计算机二级C语言考试题预测

    (50) 数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的是(D) 注:P127,要牢记 A. 自顶向下 B. 由底向上 C. 由内向外 D. 由整体到局部 (51) 在计算机中,算法是指(C) A. 查询方法 B. 加工方法...

    Netty 超高清

    如果想要更加深入地理解本书背后的理念以及Netty 源码本身,可以系统地学习一下Java 网络编程、NIO、并发和异步编程以及相关的设计模式。 京东购买链接:https://item.jd.com/12070975.html 编辑推荐, , - Netty之...

    联想Windows域设计方案书.pdf

    6 2.2 活动目录管理模式设计..............................................................................................6 2.2.1 基本概念..................................................................

    物联网可转换LED矩阵时钟-电路方案

    其设计允许将其转换为两种不同的模式。 硬件组件: 乐鑫ESP32S× 1个 MAX7219点LED矩阵模块4合1× 1个 簧片开关,SPST-NO× 1个 Digilent 5V 2.5A开关电源× 1个 跳线(通用)× 1个 C&K开关PTS 645系列开关× 1个 ...

    小百合精华区tgz生成chm文档工具

    ==========更新信息 (*很不同 +增加功能 -去除功能 #bug修复)v 2.03+ 服务器运行模式不需要服务器额外支持# 修正服务器运行模式一些bugv 2.02+ 加入服务器运行模式(编译所有版面)+ 加入stonecity.nju.edu.cnv 2.01 *...

    大数据的存储和管理.pdf

    2009年,Last.fm的Johan Oskarsson发起了⼀次关于分布式开源数据库的讨论[7],来⾃Rackspace的Eric Evans再次提出了NoSQL 的概念,这时的NoSQL主要指⾮关系型、分布式、不提供ACID的数据库设计模式。 2009年在...

    CMS 网站管理系统 源码

    CMS实现了“网站模板与程序完全分离”的新概念, JS标签跨站调用,支持不同频道、栏目、专题、内容页应用不同的模 模板制作也非常方便,用户可以发布自己制作的模板,也可以下载安装他人分享的模板。 不需写任何一行...

    Art2008 CMS 网站管理系统 v3.1.rar

    Art2008 CMS实现了“网站模板与程序完全分离”的新概念, JS标签跨站调用,支持不同频道、栏目、专题、内容页应用不同的模 模板制作也非常方便,用户可以发布自己制作的模板,也可以下载安装他人分享的模板。 不需...

    一个牛人提供的GIS源码(很好)

    一个牛人提供的GIS源码(很好 ...浅谈WEBGIS运用栅格地图实现原理[更新:Google Maps带来的新型WebGIS设计模式] http://www.cnblogs.com/Tangf/archive/2006/01/14/317327.html 校园WebGIS开发与实践(论文部分) http://...

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    科汛cms实现了“网站模板与程序完全分离”的新概念,独创ajax输出和JS标签跨站调用,支持不同频道、栏目、专题、内容页应用不同的模板,支持批量绑定模板,模板换肤更是一键之谈。 模板制作也非常方便,用户可以...

    Eclipse RCP Plugin 开发自学入门指南(CEC首发)

    Eclipse RCP 允许开发者使用 eclipse结构风格设计弹性的可扩展的应用程序,可重用Eclipse中 已存在的方法和编码模式。俗话说,万事开头难。Eclipse RCP 入手可能会比较困难、费时。接下 来我们将主要讲述如何让RCP ...

Global site tag (gtag.js) - Google Analytics