设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
一般而言,一个模式有四个基本要素
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:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
分享到:
相关推荐
本文讲述的是软件开发领域内设计模式的概念,以及如何将这些模式应用于Java编程中。设计模式是软件工程中,为了解决特定问题而形成的一种通用、可重复使用的解决方案模板。在软件开发中,设计模式为开发者提供了一套...
通过三层架构的设计,实现了代码的解耦和模块化,提高了系统的可维护性和扩展性。 总之,自动点滴管理系统是基于.NET 3.5框架和WCF技术的高效解决方案,它集成了C#和ASP.NET的优势,旨在提供安全、便捷的点滴服务...
【标题】"毕业设计智能点滴监控程序"是一个基于32位单片机C8T6的项目,旨在实现对输液过程的实时监控与无线数据传输。该项目包含两个主要部分:从机检测端和主机监控端,分别负责点滴监控和数据显示。 在【描述】中...
### VB程序界面设计经验点滴 #### 一、窗体设计 在使用VB开发软件时,设计优秀的窗体对于提升用户体验至关重要。以下是一些关键的设计原则: 1. **窗体的边框** - 默认情况下,窗体具有可调整大小的边框(`...
### 2003年全国大学生电子设计竞赛一等奖液体点滴速度监控装置 #### 背景与概述 2003年的全国大学生电子设计竞赛中,“液体点滴速度监控装置”项目荣获一等奖。该项目由中原工学院的学生团队完成,指导教师为张...
本文提出了一种基于单片机技术的自动点滴控制器设计,旨在通过技术手段提高输液过程的准确性和安全性,同时减少医护人员的劳动强度。 自动点滴控制器的核心是宏晶科技的STC10F04XE单片机,这款单片机具有成本低廉、...
同时,还可以利用MVVM(Model-View-ViewModel)设计模式,将视图、模型和视图模型解耦,使代码更易于管理和测试。 总的来说,"C#实例之自动点滴管理系统"是一个综合性的项目,涵盖了C#编程、WCF服务、数据库设计、...
1. **设计服务接口**:首先定义服务契约,包括患者管理、点滴信息管理、点滴订单等服务。 2. **实现服务**:按照服务契约实现服务类,处理客户端的请求。 3. **配置服务**:在配置文件中设置服务的地址、绑定和...
自动点滴管理系统是一个基于.NET 3.5框架的软件...总的来说,自动点滴管理系统是一个集成了.NET 3.5框架、WCF技术以及数据库管理和用户界面设计的综合项目,它展示了如何利用现代技术来提升医疗护理的效率和安全性。
传统的点滴注射方式主要依赖医护人员的人工监护和手动调节,然而,由于医护人员的工作压力大,患者数量多,这种模式可能导致监控不足,从而引发医疗事故。因此,引入自动化监控和管理的医疗点滴输液控制系统显得尤为...
总的来说,"点滴音乐播放器"是一款集本地音乐播放、播放模式选择和歌词同步显示于一体的Android应用,其背后的技术实现涵盖了多媒体处理、文件操作、用户界面设计等多个方面,充分体现了Android开发的多样性和复杂性...
UI设计点滴——深入理解用户界面设计 UI设计,全称User Interface设计,是构建产品与用户之间互动桥梁的关键环节。这个领域远不止图形设计或视觉效果那么简单,它是一门涵盖多学科的综合科学,旨在创建易用且令人...
### 基于AT89C51的液体点滴速度监控系统的设计与实现 #### 概述 液体点滴速度监控系统是一种智能系统,用于自动监控并调节输液过程中的滴速,尤其适用于需要精确控制输液速率的医疗场景。本文详细介绍了基于AT89C...
然而,深入学习C语言还需要实践,编写大量的代码,并理解更复杂的概念,如内存管理、错误处理、程序设计模式等。 此外,C++是C语言的扩展,增加了类、模板、异常处理、面向对象编程等特性,是现代软件开发中的重要...
在.NET 3.5中,WCF集成了多种通信模式,如SOAP、RESTful,使得开发者能够创建灵活且高度可配置的服务。 **WCF基础** 1. **服务契约**: WCF服务的核心是服务契约,它定义了服务提供的操作和消息交换格式。在.NET中...
自动点滴管理系统是一款专为医疗单位设计的信息化解决方案,利用了微软的.NET框架和Windows Communication Foundation (WCF) 技术。这款系统旨在提高医疗机构的工作效率,优化点滴治疗过程中的管理和监控,确保患者...
【输液点滴监护系统设计与制作】 随着科技的飞速发展,智能化控制技术在医疗领域中的应用越来越广泛,其中,输液点滴监护系统的研发成为自动化临床设备的重点之一。该系统旨在实现对输液过程的全程监控,以提高医疗...
5. **服务行为**:服务可以有多种行为,如服务元数据发布(允许其他工具生成客户端代理),服务实例模式(单例或多例),以及错误处理策略等。这些行为通过`[ServiceBehavior]`属性进行配置。 6. **客户端调用服务*...