`

设计模式的三大分类解析

 
阅读更多
    设计模式在功能上分为三大类:创建型模式,结构型模式和功能性模式。下面根据这三大类模式来展开设计模式的实现目的和实现方式。
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则抽象了访问和遍历一个集合中的对象的方式
分享到:
评论

相关推荐

    设计模式 带目录标签

    书中分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别有用。此书适合大学计算机专业的学生、研究生及相关人员参考。书中涉及的设计模式并不描述新的或未经证实的设计,只收录了那些在不同...

    Java设计模式精讲1

    Java设计模式精讲定义与类型适用场景优点缺点Coding源码解析第1节UML类图及时序图入门1.1本章导航定义特点分类类图时序图记忆技巧1.2UML定义统一建

    设计模式精解-GoF+23+种设计模式解析(附实现源码)

    23种设计模式及分类,附带源代码及讲解,便于初学者学习及了解。

    Java的23种设计模式

    Java的设计模式中涉及到23个模式,主要被分类为创建型模式、结构型模式、行为模式,分别从对象的创建,对象和对象间的结构组合,以及对象交互三个方面为面向对象系统建模方法给予解析和指导。现在又有很多模式陆续...

    J2EE 核心模式解析

    本书主要讲述企业JAVA 2平台(J2EE)关键技术的模式、最佳实践...涉及J2EE包括的15个模式的分类和大量的策略,便于读者更好地掌握JAVA技术。 本书适合J2EE的爱好者、程序员、设计师、开发者和技术管理者参考。PDG格式。

    解析C++编程中如何使用设计模式中的状态模式结构

    主要介绍了如何在C++编程中适用设计模式中的状态模式结构,状态模式强调将特定状态相关的逻辑分散到一些类的状态类中,需要的朋友可以参考下

    解析设计模式中的Prototype原型模式及在C++中的使用

    原型模式的意图是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 适用性  当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者 为了避免创建一个与产品类层次平行的工厂类层次时;...

    深入解析设计模式中的装饰器模式在iOS应用开发中的实现

    主要介绍了设计模式中的装饰器模式在iOS应用开发中的实现,包括对分类和委托的深入讲解,需要的朋友可以参考下

    半导体芯片行业,从设计、制造、封测三个维度去了解. 集成电路产业通常被分为芯片设计、芯片制造、封装测试三大领域带你了解半导体职业

    集成电路产业通常被分为芯片设计、芯片制造、封装测试三大领域带你了解半导体职业相关 半导体行业发展历程 中国半导体行业现状 认识半导体 基础概念 分类 半导体产业链 产业模式 核心产业链 半导体Fab Fab架构...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    Spring技术内幕:深入解析Spring架构与设计原理

    下载频道>资源分类>开发技术>Java>Spring技术内幕:深入解析Spring架构与设计原理 1/2 Spring技术内幕:深入解析Spring架构与设计原理 1/2资源大小:59MB 上传日期:2011-11-15 资源积分:5分 下载次数:30 上 传 者...

    day020-继承加强和设计模式代码和笔记.rar

    5. 设计模式:(框架中使用,是程序设计的高级思想) 1. 单例模式:(重点) 1. 概念:设计一个类,这个类只能创建一个对象。(限制创建对象对象数量) 2. 怎么设计? 控制创建对象的数量 => 创建...

    模式识别(模型选择,SVM,分类器)作业解答+代码.docx

    Adaboost算法的设计思想。从机器学习的角度简述模型选择的基本原则。丑小鸭定理;Occam剃刀原理;最小描述长度定理。简述分类器集成的基本方法。推导Hard-Margin SVM的优化目标。解释Hinge Loss在SVM中的意义。编程...

    浅析php适配器模式(Adapter)

    前几篇介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,接下来讲讲结构型模式。 一、什么是结构型模式? 结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构...

    Android本科毕业设计阅读小说app系统源码.zip

    Android本科毕业设计阅读小说app系统源码。功能简介如下: 一、书籍阅读介绍 1.、网络书籍:可以在线阅读网络书籍,无需下载,当然也提供了将书籍下载到本地的功能 2.、本地书籍:可以解析本地书籍并阅读,但要求...

    ads2008射频电路设计与仿真实例05

    11.3.3 共源共栅放大器IC设计目标三 第12章 TDR瞬态电路仿真 12.1 时域反射仪原理及测试方法 12.1.1 TDR原理说明及系统构成 12.1.2 TDR应用于传输线阻抗的测量原理 12.2 TDR电路的瞬态仿真实例 12.2.1 利用ADS仿真...

    ads2008射频电路设计与仿真实例(03,04,06)

    11.3.3 共源共栅放大器IC设计目标三 第12章 TDR瞬态电路仿真 12.1 时域反射仪原理及测试方法 12.1.1 TDR原理说明及系统构成 12.1.2 TDR应用于传输线阻抗的测量原理 12.2 TDR电路的瞬态仿真实例 12.2.1 利用ADS仿真...

    ads2008射频电路设计与仿真实例07

    11.3.3 共源共栅放大器IC设计目标三 第12章 TDR瞬态电路仿真 12.1 时域反射仪原理及测试方法 12.1.1 TDR原理说明及系统构成 12.1.2 TDR应用于传输线阻抗的测量原理 12.2 TDR电路的瞬态仿真实例 12.2.1 利用ADS仿真...

    ads2008射频电路设计与仿真实例(08,10)

    11.3.3 共源共栅放大器IC设计目标三 第12章 TDR瞬态电路仿真 12.1 时域反射仪原理及测试方法 12.1.1 TDR原理说明及系统构成 12.1.2 TDR应用于传输线阻抗的测量原理 12.2 TDR电路的瞬态仿真实例 12.2.1 利用ADS仿真...

Global site tag (gtag.js) - Google Analytics