文档章节

第一章,思想为源.设计模式的概述及分类

水门-kay
 水门-kay
发布于 2016/07/23 09:41
字数 2631
阅读 710
收藏 0

一,设计模式概述

  关于模式这一概念, 最早出现在城市建筑领域 Christopher Alexander 的一本关于建筑的书(The Timeless Way of Building)。他在书中明确给出了模式的概念: 每一个模式描述了一个在我们周围不断重复发的问题, 以及该问题的解决方案的核心, 这样你就能一次又一次地使用该方案而不必做重复劳动, 他使用模式这一概念来解决建筑中的一些问题, 现在这一概念逐渐被计算机科学所采纳。计算机科学中对设计模式的简单定义:对于一类重复出现的问题的一种可重用的解决方案, 在软件工程中一个设计模式也许能解决一类软件设计问题。一般而言, 一个模式有四个基本要素:
  # 模式名称: 是一个助记名, 它用一两个词来描述模式的问题、解决方案和效果。
  # 问题: 描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果, 它可能描述特定的设计问题, 如怎样用对象表示算法, 也可能描述了导致不灵活设计的类或对象结构, 有时侯, 问题部分还会包括使用模式必须满足的一系列先决条件。
  # 解决方案: 描述了一个设计的各个组成成分(结构), 以及它们之间的相互关系及各自的职责和协作方式。
  # 效果: 描述了模式使用的效果及使用模式应注意的问题。
  设计模式使设计人员可以更加简单方便地改进或复用以往成功的设计和体系结构。将已被实践证明的技术表示成设计模式也会使新的系统开发者更加容易理解其设计思路。设计人员只要搞清楚设计模式, 就可以在很大程度上吸收那些蕴涵在模式中的宝贵经验,对面向对象的系统有更完善的了解。同时, 这些模式可以直接用来指导面向对象系统中至关重要的建模问题。假如有相同的问题背景, 则可直接套用。更具体的说, 通过使用设计模式, 能够增强被包装类的复用功能, 能够有效地处理需求的变更, 某些模式可减少各个类之间的藕合和依赖, 更重要的是, 熟悉设计模式的设计人员能给其以全新的设计思想。

 

二,设计模式的分类

  软件设计模式的分类有不同的方法。本文主要参考文献来进行分类。根据模式是用来完成什么工作的不同, 可将设计模式分为创建型模式、结构型模式、行为型模式三种。根据模式是用于类还是用于对象,可将其分为类模式和对象模式。类模式处理类和子类之间的关系, 这些关系通过继承建立, 是静态的, 在编译时刻便确定下来; 对象模式处理对象间的关系, 这些关系在运行时刻是可以变化的, 更具有动态性。

  1,创建型设计模式

  创建型模式与对象的创建有关, 即描述怎样创建一个对象, 它隐藏对象创建的具体细节, 使程序代码不依赖具体的对象。 因此当我们增加一个新对象时几乎不需要修改代码即可。创建型类模式将对象的部分创建工作延迟到子类, 而创建型对象模式则将它延迟到另一个对象中。 创建型类模式有Factory Method(工厂方法)模式, 创建型对象模式包括 Abstract Factory(抽象工厂)、Builder(生成器)、Prototype(原型)、Singleton(单件)四种模式。创建型模式中, Abstract Factory 由工厂对象产生多个类的对象; Builder 是由这个工厂对象使用一个相对复杂的协议, 逐步创建一个相对复杂的产品; Prototype 是由该工厂对象通过拷贝原型对象来创建产品对象; Singleton 确保一个类只创建一个实例; Factory Method 是先生成所要创建的对象的类的子类, 即由其子类进行实例化创建对象。上述模式中, Abstract Factory 与 Factory Method 的关系是:Abstract Factory 仅声明一个创建 Product(产品)的接口, 真正创建 Product 是由 AbstractProduct 类的子类 ConcreteProduct 类来实现,实现办法通常是为每一个 Product 定义一个 Factory Method, 而一个 ConcreteFactory(具体的工厂) 将为每个产品重定义 Factory Method 以指定产品。 当然 Abstract Factory 中的 ConcreteFactory 也可以用 Prototype 模式来实现, 即具体工厂使用产品系列中每一个产品的原型实例来初始化, 再通过复制原型来创建新产品; Abstract Factory 与 Builder 的区别是: Builder 模式着重一步步构造一个复杂对象, 并在最后一步返回产品, 而 Abstract Factory 着重于多个系列的产品对象, 其产品是立即可见的。

  2,结构型设计模式

  结构型模式处理类或对象的组合, 即描述类和对象之间怎样组织起来形成大的结构, 从而实现新的功能。 结构型类模式采用继承机制来组合类, 如 Adapter(适配器类)模式; 结构型对象模式则描述了对象的组装方式, 如 Adapter(适配器对象) 模式、Bridge(桥接)模式、Composite(组合)模式、Decorator(装饰)模式、Facade(外观)模式、Flyweight(享元)模式、Proxy(代理)模式。结构型模式中, Adapter 是将一个类的接口转换成用户希望的另外一个接口; Bridge 是将产品的抽象接口部分与具体实现部分分离; Composite 是将对象组合成树型结构以表示/部分)整体的层次结构; Decorator 动态地给一个对象增加一些额外的职责; Frade 是为子系统中的一组接口提供一个一致的界面; Flyweight 使用共享技术支持大量细粒度对象; Proxy 则是为其他对象提供一种代理以控制对这个对象的访问。上述模式中, Adapter 与 Bridge 的区别是: Bridge 目的是将接口部分和实现部分分离, 从而对它们可以较为容易也相对独立的加以改变, 而 Adapter 则意味着要改变一个已有对象的接口; Decorator 与 Adapter 的区别是: Decorator 模式增强了对象的功能而又不改变对象的接口, 但 Adapter 模式将给对象一个全新的接口; Proxy 与 Adapter 的区别是: Proxy 提供的是与其实体相同的接口, 即在不改变接口的条件下, 为另一个对象提供代理, 而 Adapter 为其所适配的对象提供了一个不同的接口。

  3,行为型设计模式

  行为型设计模式描述算法以及对象之间的任务(职责)分配, 它所描述的不仅仅是类或对象的设计模式, 还有它们之间的通讯模式。这些模式刻划了在运行时刻难以跟踪的复杂的控制流。行为型类模式使用继承机制在类间分派行为, 如Template Method(模板方法)模式和 Interpreter(解释器)模式;行为型对象模式使用对象复合而不是继承, 它描述一组对象怎样协作完成单个对象所无法完成的任务, 如Chain of Reponsibility(职责链)模式、Command(命令)模式、Iterator(迭代器)模式、 Mediator(中介者)模式、Memento(备忘录)模式、Observer(观察者)模式、State(状态)模式、Strategy(策略)模式、Visitor(访问者)模式。行为型模式中, Chain of Reponsibility 模式是将处理某个请求的对象连成一条链,用户可以沿着这条链传递该请求 , 直到有一个对象处理它为止; Command 模式是将一个请求封装成一个对象, 从而可用不同的请求对客户进行参数化;Interpreter模式描述的是如何为某个语言定义文法, 如何在该语言中表示一个句子以及如何解释这些句子; Iterator 模式提供一种方法顺序访问一个聚合中的各个元素而又不暴露该对象的内部表示; Mediator 是用一个中介对象来封装一系列复杂对象的交互, 中介者使各对象不需要显示的相互引用; Memento 是在不破坏封装性的前提下, 捕获一个对象的内部状态并在该对象之外保存这个状态, 这样以后就可将该对象恢复到原先某一个状态; Observer 是定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知, 并自动更新;State 模式是允许一个对象在其内部状态改变时改变它的行为;Strategy 定义一系列的封装算法, 把他们一个个封装起来, 并使它们可以相互替换;Template Method 是定义一个操作中的算法的构架, 而将一些步骤延迟到子类中(即一次性实现一个算法的不变部分, 并将可变的行为留给子类来实现);Visitor 模式是使在不改变各元素类的前提下定义作用于这些元素的新操作。上述行为模式之间是相互补充的关系, 例如 Iterator 可以遍历一个聚合, 而 Visitor 可以对聚合的每一个元素进行一个新操作。 行为型模式和其他类型的模式也能很好的协同工作, 如一个使用 Composite 模式的系统可以使用 Iterator 进行遍历或用一个 Visitor 对该复合的个别元素进行一些新操作。

© 著作权归作者所有

水门-kay
粉丝 460
博文 19
码字总数 59660
作品 0
杭州
后端工程师
私信 提问
加载中

评论(1)

warlock中国
warlock中国
赞赞赞!!!
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
设计模式(0)—— 概述

设计模式(Design Pattern),是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式于...

长平狐
2013/01/06
88
0
Java设计模式系列一(前言)

说起设计模式,很多人都会觉得这个概念很熟悉,会想到单例模式、工厂模式等等,但是似乎又说不出来什么,说不上它的核心思想和设计原则。其实我们的项目中,为了代码复用,增加可维护性,很多...

Mooree
04/07
27
0
Java经典设计模式-结构型模式-适配器模式(Adapter)

适配器模式 适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的...

Idea
2018/01/20
127
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
17
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部