在面向对象的编程中,软件编程人员更加注重以前的代码的重用性和可维护性。
设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
一般而言,一个模式有四个基本要素
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
:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
原文地址
相关推荐
千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...
首先,我们来了解一下设计模式的基本概念。设计模式是在特定情境下,为解决软件设计中常见问题而总结出的最佳实践。它们是经验的结晶,经过了时间的检验,被广泛应用于各种编程语言中,包括Android。设计模式并不...
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
根据提供的标题“转载 天线原理与设计”以及描述中的简略信息,我们可以推断出这篇文章主要关注的是天线的工作原理及其设计方法。虽然提供的部分内容似乎并没有直接包含具体的知识点,但基于标题和描述,我们可以...
数据库设计主要包括确定数据类型、定义数据间的关联以及选择合适的数据库模式。在这个例子中,我们看到数据库名称为"ylc_project",使用MySQL5.0作为数据库系统,并且使用phpMyAdmin作为客户端连接工具。项目由月亮...
3. 商业模式画布:商业模式画布是一种系统化的思维方式,它不仅仅适用于企业商业模式的设计和创新,也可以被运用到个人职业生涯规划等领域。商业模式画布的核心概念在于提供了一个清晰、简洁的方式来可视化和分析...
本文主要针对C#的初学者,探讨一个采用三层架构设计的源码记事本项目,帮助初学者理解并实践C#编程以及软件设计模式。 首先,三层架构是一种常见的软件设计模式,它将应用程序分为三个主要部分:表现层...
随着技能的积累,开发者会逐步接触软件工程实践,如需求分析、设计模式、版本控制、项目管理。需求分析要求开发者理解用户需求,转化成可实施的技术规格。设计模式是解决常见问题的标准化解决方案,能提高代码的...
这个资料包中的“行业分类-电子政务-一种自移式转载机电液控制系统.pdf”很可能是详细阐述了上述概念和应用案例,包括系统设计原理、实施步骤、效果评估等方面,对于理解电子政务在工业自动化领域的实践具有很高的...
【Java】在Java部分,面试可能涵盖基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、JVM内存模型以及设计模式等方面。例如,可能会问到如何优化代码性能,如何处理并发问题,或者对Java 8的新特性如...
- 设计模式:如工厂模式、观察者模式等,它们在解决常见问题时提供了一种标准解决方案。 - 无状态业务层:理解其含义并讨论长事务的处理方式。 - 架构图:如用例图、类图、序列图等,用于表示系统组件及其相互...
在SpringBoot项目中,核心概念和技术可能包括: 1. **Spring Framework**: 提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能。 2. **Spring Boot Auto Configuration**: 根据类路径中的jar和存在的bean...
3. 设计模式 4. 关系数据库基础知识 5. 软件架构原则和软件工程基础 6. NBear ORM框架 7. JavaScript和Ajax 8. ASP.NET AJAX框架,特别是客户端编程 9. HTML、CSS和标准化布局 整个系列基于.NET Framework 2.0,...
组合式解析器是一种基于规则和模式匹配的解析方法,它将复杂的语法结构分解成小的、可重用的解析单元,从而能够更灵活地处理各种语言或数据格式。Java 为实现此类解析器提供了丰富的库支持,如 ANTLR、JavaCC 和 ...
9. **设计模式**:在实现大型网络应用时,设计模式如工厂模式、观察者模式和状态机模式等可以帮助构建可扩展和可维护的代码。 10. **网络库**:为了简化网络编程,有许多优秀的C++库可供使用,如Boost.Asio、Poco库...
里面代码没有用到设计模式等概念,但使用该用的技术都用了 比如swing synth thread, 新手学习入门可以看看。 安装说明: 安装之后的默认目录在 D:\那群男人酒店管理系统 安装完后请记得附加数据库 数据库文件...
这种设计模式可以节省空间,使复杂的界面保持整洁,并帮助用户更快地定位所需信息。 这款"tab页小插件"可能包含以下关键特性: 1. **样式自定义**:如同EasyUI,它可能允许开发者通过CSS样式表进行高度定制,以...
10. **设计模式**:习题可能涉及到一些常见的设计模式,如单例、工厂、观察者、装饰器等,设计模式是解决常见编程问题的通用解决方案。 通过解答这些习题,学习者不仅能巩固Java语言的基础,还能提高解决实际问题的...