- 浏览: 63097 次
- 性别:
- 来自: 北京
文章分类
最新评论
设计模式在功能上分为三大类:创建型模式,结构型模式和功能性模式。下面根据这三大类模式来展开设计模式的实现目的和实现方式。
1、创建型模式
创建型模式抽象了实例化过程。它们帮助一个系统如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建模式将实例化委托给另一个对象。
随着系统演化得越来越依赖于对象复合而不是类继承,创建模式变得更加重要。当这种情况发生时,重心从对一组固定行为的硬编码(hard-coding)转移为定义一个较小的基本行为集,这些行为可以被组合成任意数目的更复杂的行为。这样创建有特定行为的对象要求的不仅仅是实例化一个类。
在这些模式中有两个不断出现的主旋律。第一,它们将关于该系统使用哪些具体的类的信息封装起来。第二,它们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是由抽象类所定义的接口。因此,创建型模式在什么时候被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。它们允许你用结构和功能差别很大的“产品”对象配置一个系统。配置可以使静态的(即在编译时指定),也可以使动态的(在运行时)。
有时创建型模式是相互竞争的。例如,在有些情况下Prototype或Abstract Factory用起来都很好。而在另外一些情况下它们是互补的:Builder可以使用其他模式去实现某个构件的创建。Prototype可以再它的实现中使用Singleton。
2、结构型模式
结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果是这个类包含了所有父类的性质。这一模式尤其有助于多个独立开发的类库协同工作。另外一个例子是类形式的Adapter模式。一般来说,适配器使得一个接口(adaptee的接口)与其它接口兼容,从而给出了多个不同接口的统一抽象。为此,类适配器对一个adaptee类进行私有继承。这样,适配器就可以用adaptee的接口表示它的接口。
结构型对象模式不是对接口和实现类进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以再运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态类组合是不可能实现的。
Composite模式是结构型对象模式的一个例子。它描述了如何构造一个类层次结构,这一结构由两种类型的对象(基元对象和组合对象)所对应的类构成。其中的组合对象使得你可以组合基元对象以及其他的组合对象,从而形成更复杂的结构。在Proxy模式中,proxy对象作为其他对象的一个方便的替代或占位符。它的使用可以有多重形式。例如它可以在局部空间中代表一个远程地址空间中的对象,也可以表示一个要求被加载的较大的对象,还可以用来保护对敏感对象的访问。Proxy模式还提供了对对象的一些特有性质的一定程度上的简介访问,从而可以限制、增强或修改这些性质。
Flyweight模式为了共享对象定义了一个结构。至少有两个原因要求对象共享:效率和一致性。Flyweight的对象共享机制主要强调对象的空间效率。使用很多对象的应用必需考虑每一个对象的开销。使用对象共享而不是对象复制,可以节省大量的空间资源。但是仅当这些对象没有定义与上下文有关的状态时,它们才可以被共享。Flyweight的对象没有这样的状态。任何执行任务时需要的其他一些信息仅当需要时才被传递过去。由于不存在与上下文相关的状态。因此Flyweight对象可以被自由地共享。
如果说Flyweight模式说明了如何生成很多较小的对象,那么Facade模式则描述了如何用单个对象表示整个子系统。模式中的facade用来表示一组对象,facade的职责是将消息转发给它所表示的对象。Bridge模式将抽象和其实现分离,从而可以独立地改变它们。
Decorator模式描述了如何动态地为对象添加职责。Decorator模式是一种结构型模式。这一模式采用递归方式组合对象,从而允许你添加任意多的对象职责。例如,一个包含用户界面组件的Decorator对象可以将边框或阴影这样的装饰添加到该组件中,或者它可以将窗口滚动或缩放这样的功能添加到组件中。我们可以将一个Decorator对象嵌套在另外一个对象中就可以很简单地增加两个装饰,添加其他的装饰也是如此。因此,每个Decorator对象必须是与其组件的接口兼容并且保证将消息传递给它。Decorator模式在转发一条信息之前或之后都可以完成它的工作(比如绘制组件的边框)。
3、行为模式
行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时刻难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象的联系方式上来。
行为类模式使用继承机制在类间分派行为。其中Template Method较为简单和常见。模板方法是一个算法的抽象定义,它逐步得定义该算法,每一步调用一个抽象操作或一个原语操作,子类定义抽象操作以具体实现该算法。另一种行为模式是Intepreter。它将一个文法表示为一个类层次,并实现一个解释器作为这些类的实例上的一个操作。
行为对象模式使用对象复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任一个对象都无法单独独立完成的任务。这里的一个重要问题是对等的对象如何互相了解对方。对等对象可以保持显式的对对方的引用,但那会增加他们的耦合度。在极端情况下,每一个对象都要了解所有其他的对象。Mediator在对等对象间引入了一个mediator对象以避免这种情况的出现。mediator提供了松耦合所需的间接性。
Chain of Responsibility提供更松的耦合。它让你通过一条候选对象链隐式的想一个对象发送请求。根据运行时刻情况任一候选者都可以响应相应的请求。候选者的数目是任意的,你可以在运行时刻决定哪些候选者参与到链中。
Observer模式定义并保持对象间的依赖关系。典型的Observer的例子是Smalltalk中的模型/视图/控制器,其中一旦模型的状态发生变化,模型的所有视图都会得到通知。
其他的行为对象模式常将行为封装在一个对象中并将请求指派给它。Strategy模式将算法封装到对象中,这样可以方便地指定和改变一个对象所使用的算法。Command模式将请求封装在对象中,这样它就可作为参数来传递,也可以被存储在历史列表里,或者以其他方式使用。State模式封装一个对象的状态,使得当这个对象的状态对象变化时,该对象可改变它的行为。Visitor封装分布于多个类之间的行为,而Iterator则抽象了访问和遍历一个集合中的对象的方式
1、创建型模式
创建型模式抽象了实例化过程。它们帮助一个系统如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建模式将实例化委托给另一个对象。
随着系统演化得越来越依赖于对象复合而不是类继承,创建模式变得更加重要。当这种情况发生时,重心从对一组固定行为的硬编码(hard-coding)转移为定义一个较小的基本行为集,这些行为可以被组合成任意数目的更复杂的行为。这样创建有特定行为的对象要求的不仅仅是实例化一个类。
在这些模式中有两个不断出现的主旋律。第一,它们将关于该系统使用哪些具体的类的信息封装起来。第二,它们隐藏了这些类的实例是如何被创建和放在一起的。整个系统关于这些对象所知道的是由抽象类所定义的接口。因此,创建型模式在什么时候被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予你很大的灵活性。它们允许你用结构和功能差别很大的“产品”对象配置一个系统。配置可以使静态的(即在编译时指定),也可以使动态的(在运行时)。
有时创建型模式是相互竞争的。例如,在有些情况下Prototype或Abstract Factory用起来都很好。而在另外一些情况下它们是互补的:Builder可以使用其他模式去实现某个构件的创建。Prototype可以再它的实现中使用Singleton。
2、结构型模式
结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果是这个类包含了所有父类的性质。这一模式尤其有助于多个独立开发的类库协同工作。另外一个例子是类形式的Adapter模式。一般来说,适配器使得一个接口(adaptee的接口)与其它接口兼容,从而给出了多个不同接口的统一抽象。为此,类适配器对一个adaptee类进行私有继承。这样,适配器就可以用adaptee的接口表示它的接口。
结构型对象模式不是对接口和实现类进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以再运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态类组合是不可能实现的。
Composite模式是结构型对象模式的一个例子。它描述了如何构造一个类层次结构,这一结构由两种类型的对象(基元对象和组合对象)所对应的类构成。其中的组合对象使得你可以组合基元对象以及其他的组合对象,从而形成更复杂的结构。在Proxy模式中,proxy对象作为其他对象的一个方便的替代或占位符。它的使用可以有多重形式。例如它可以在局部空间中代表一个远程地址空间中的对象,也可以表示一个要求被加载的较大的对象,还可以用来保护对敏感对象的访问。Proxy模式还提供了对对象的一些特有性质的一定程度上的简介访问,从而可以限制、增强或修改这些性质。
Flyweight模式为了共享对象定义了一个结构。至少有两个原因要求对象共享:效率和一致性。Flyweight的对象共享机制主要强调对象的空间效率。使用很多对象的应用必需考虑每一个对象的开销。使用对象共享而不是对象复制,可以节省大量的空间资源。但是仅当这些对象没有定义与上下文有关的状态时,它们才可以被共享。Flyweight的对象没有这样的状态。任何执行任务时需要的其他一些信息仅当需要时才被传递过去。由于不存在与上下文相关的状态。因此Flyweight对象可以被自由地共享。
如果说Flyweight模式说明了如何生成很多较小的对象,那么Facade模式则描述了如何用单个对象表示整个子系统。模式中的facade用来表示一组对象,facade的职责是将消息转发给它所表示的对象。Bridge模式将抽象和其实现分离,从而可以独立地改变它们。
Decorator模式描述了如何动态地为对象添加职责。Decorator模式是一种结构型模式。这一模式采用递归方式组合对象,从而允许你添加任意多的对象职责。例如,一个包含用户界面组件的Decorator对象可以将边框或阴影这样的装饰添加到该组件中,或者它可以将窗口滚动或缩放这样的功能添加到组件中。我们可以将一个Decorator对象嵌套在另外一个对象中就可以很简单地增加两个装饰,添加其他的装饰也是如此。因此,每个Decorator对象必须是与其组件的接口兼容并且保证将消息传递给它。Decorator模式在转发一条信息之前或之后都可以完成它的工作(比如绘制组件的边框)。
3、行为模式
行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时刻难以跟踪的复杂的控制流。它们将你的注意力从控制流转移到对象的联系方式上来。
行为类模式使用继承机制在类间分派行为。其中Template Method较为简单和常见。模板方法是一个算法的抽象定义,它逐步得定义该算法,每一步调用一个抽象操作或一个原语操作,子类定义抽象操作以具体实现该算法。另一种行为模式是Intepreter。它将一个文法表示为一个类层次,并实现一个解释器作为这些类的实例上的一个操作。
行为对象模式使用对象复合而不是继承。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任一个对象都无法单独独立完成的任务。这里的一个重要问题是对等的对象如何互相了解对方。对等对象可以保持显式的对对方的引用,但那会增加他们的耦合度。在极端情况下,每一个对象都要了解所有其他的对象。Mediator在对等对象间引入了一个mediator对象以避免这种情况的出现。mediator提供了松耦合所需的间接性。
Chain of Responsibility提供更松的耦合。它让你通过一条候选对象链隐式的想一个对象发送请求。根据运行时刻情况任一候选者都可以响应相应的请求。候选者的数目是任意的,你可以在运行时刻决定哪些候选者参与到链中。
Observer模式定义并保持对象间的依赖关系。典型的Observer的例子是Smalltalk中的模型/视图/控制器,其中一旦模型的状态发生变化,模型的所有视图都会得到通知。
其他的行为对象模式常将行为封装在一个对象中并将请求指派给它。Strategy模式将算法封装到对象中,这样可以方便地指定和改变一个对象所使用的算法。Command模式将请求封装在对象中,这样它就可作为参数来传递,也可以被存储在历史列表里,或者以其他方式使用。State模式封装一个对象的状态,使得当这个对象的状态对象变化时,该对象可改变它的行为。Visitor封装分布于多个类之间的行为,而Iterator则抽象了访问和遍历一个集合中的对象的方式
发表评论
-
STRATEGY(策略)——对象行为型模式
2013-06-17 16:19 6911、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
STATE(状态)—— 对象行为型模式
2013-06-14 16:49 7901、意图 允许一个 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 7131、意图 定义对象 ... -
MEDIATOR(中介者)——对象行为型模式
2013-06-09 16:17 6841、意图 用一个中 ... -
CHAIN OF RESPONSIBILITY(职责链) —— 对象行为型模式
2013-06-06 16:32 6541、意图 使多个对象都有机会处理请求,从而避免请求的发 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7591、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 7031、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7751、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 7261、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 7051、意图 定义一个 ... -
ADAPTER(适配器) --- 类对象结构型模式
2013-03-28 11:33 6001、意图 将一个类的接口转化成客户希望的另外一个接口。 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7461、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 7291、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 9201、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 6361、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6861、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7791. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 7071、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 7251、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 778本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
首先,我们来看一下23种设计模式的分类:它们可以分为三大类,即创建型模式、结构型模式和行为型模式。 1. **创建型模式**(Creational Patterns):这类模式主要关注对象的创建过程,包括单例模式、工厂方法模式、...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它提供了一种解决常见问题的方法论。GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的...
设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。GoF(Gang of Four)23种设计模式是软件开发中的经典,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...
#### 二、设计模式分类 设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。每种模式都针对特定类型的问题提供了解决方案。 ##### 1. 创建型模式 创建型模式关注对象的创建机制,使得系统在不指定具体...
### 设计模式精解—GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式作为一种重要的面向对象设计工具,在软件开发中扮演着至关重要的角色。本文旨在深入解析GoF(Gang of Four,四人组)提出的23种设计...
### 设计模式解析 #### 一、设计模式概述与核心价值 设计模式是软件工程领域的一个重要概念,它提供了一套解决常见问题的有效方法。在《设计模式解析》这一资源中,作者通过丰富的经验和深入浅出的讲解,帮助读者...
下面,我们将详细解读这份资料中的设计模式分类及其核心知识点。 ### 创建型模式 1. **Factory模式**:工厂方法模式提供了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让类的实例化延迟到子类。...
### 设计模式精解——GoF 23种设计模式解析 #### 0. 引言 ##### 0.1 设计模式解析(总序) 设计模式是软件工程领域的一个重要概念,它代表着一系列被广泛接受的解决方案,用于解决特定类型的软件设计问题。通过...
#### 二、设计模式分类 设计模式通常被分为三类:创建型模式、结构型模式和行为型模式。 ##### 1. 创建型模式 创建型模式关注的是对象的创建机制,旨在为对象的创建提供统一的接口,简化客户端代码。 - **...
设计模式是软件工程中用于解决常见问题的模板,是编程实践中一种被反复使用、多数人知晓、经过分类编目,并代码化编写的经典问题的解决方案。在软件设计中应用设计模式,可以提高代码的可重用性、可读性和可维护性,...
本资源包含了这23种设计模式的详细解析,并附带了C++语言的实现,对于深入理解和应用设计模式有着极大的帮助。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在C++中,可以使用静态成员变量或...
设计模式分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建过程,如单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。结构型模式主要处理对象的组合和聚合,如适配器模式、桥接...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...