java设计模式:概述与GoF的23种设计模式

软件设计模式的产生背景

设计模式这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。

1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。

1979 年他的另一部经典著作《建筑的永恒之道》(The Timeless Way of Building)进一步强化了设计模式的思想,为后来的建筑设计指明了方向。

1987 年,肯特·贝克(Kent Beck)和沃德·坎宁安(Ward Cunningham)首先将克里斯托夫·亚历山大的模式思想应用在 Smalltalk 中的图形用户接口的生成中,但没有引起软件界的关注。

直到 1990 年,软件工程界才开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。

1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书,在本教程中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)匿名著称。

直到今天,狭义的设计模式还是GoF(Gang of Four,四人组)的23种经典设计模式。

软件设计模式的概念与意义

有关软件设计模式的定义很多,有些从模式的特点来说明,有些从模式的作用来说明,这里给出的定义从两个方面来说明。

软件设计模式的概念

软件设计模式(Software Design Patern),简称设计模式,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

学习设计模式的意义

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点:

1.可以提高程序员的思维能力、编程能力和设计能力。

2.使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。

3.使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

当然,软件设计模式只是一个引导,在具体的软件开发中,必须根据设计的应用系统的特点和要求来恰当选择。对于简单的程序开发,可能写一个简单的算法要比引入某种设计模式更加容易。只是开发大项目或者是设计框架的时候,用设计模式来组织代码显然是更好的选择。

软件设计模式的基本要素

软件设计模式使人们可以更加简单地服用成功地设计和体系结构,它通常包含以下几个基本要素:模式名称、别名、冬季、问题、解决方案、效果、结构、模式角色、合作关系、实现方法、适用性、已知应用、例程、 模式扩展和相关模式等。

以下是其中最关键的4个主要元素:

模式名称(PatternName)

每一个模式都有自己的名字,通常用一两个词来描述,可以根据模式的问题、特点、解决方案、工程和效果来命名。模式名称有助于我们理解和记忆该模式,也方便我们来讨论自己的设计。

问题(Problem)

问题描述了该模式的应用环境,即在什么情况下使用该模式。它解释了设计问题和问题存在的前因后果,以及必须满足的一系列先决条件。

解决方案(Solution)

模式问题的解决方案包括设计的组成成分、它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象的组合)来解决问题。

效果(Consequence)

效果描述了模式的应用效果以及使用该模式应该权衡的问题,即模式的优缺点。主要是对时间和空间的衡量,以及该模式对系统的灵活性、扩展性、可移植性的影响,也考虑其实现问题。显式地列出这些效果,对理解和评价这些模式有很大地帮助。

GoF的23中设计模式的分类

设计模式有两种分类方法,一是根据模式的目的来分,二是根据模式的作用范围来分。

根据目的来分(3种)

根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式3种。

创建型模式:用于描述怎样创建对象,它的主要特点是将对象的创建与使用分离。GoF提供了单例、原型、工厂方法、抽象工厂、创造者等5种创建型模式。

结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF提供了代理、适配器、桥接、装饰、外观、享元、组合等7种结构型模式。

行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoF提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等11种行为型模式。

根据作用范围来分(2种)

根据模式主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式2种。

类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF的工厂方法、(类)适配器、模板方法、解释器属于该模式。

对象模式:用于处理对象之间的关系, 这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF除了类模式中的4种,其它的都是对象模式。

通过二维表格能清晰看出GoF23种设计模式的分类。

范围\目的 创建型模式 结构型模式 行为型模式
类模式 工厂方法(Facory Methond) 适配器(类)(Class Adapter)
模板方法(Template Method)

解释器(Interpreter)

对象模式
单例(Singleton)

原型(Prototype)

抽象工厂(Factory Method)

建造者(Buileder)


代理(Proxy)

适配器(对象)(Object Adapter)

桥接(Bridge)

装饰(Decorator)

外观(Facade)

享元(Flyweight)

组合(Composite)


策略(Strategy)

命令(Command)

职责链(Chain of Responsibility)

状态(State)

观察者(Observer)

中介者(Mediator)

迭代器(Iterator)

访问者(Visitor)

备忘录(Memento)

GoF的23种设计模式的功能

单例模式(Singleton):

原文地址:https://www.cnblogs.com/yanggb/p/10349993.html

时间: 2024-10-26 02:52:20

java设计模式:概述与GoF的23种设计模式的相关文章

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体

为什么GOF的23种设计模式里面没有MVC?

GoF (Gang of Four,四人组, <Design Patterns: Elements of Reusable Object-Oriented Software>/<设计模式>一书的作者:Erich Gamma.Richard Helm.Ralph Johnson.John Vlissides)并没有把MVC提及为一种设计模式,而是把它当做"一组用于构建用户界面的类集合".在他们看来,它其实是其它三个经典的设计模式的演变:观察者模式(Observer

Java设计模式:23种设计模式

1. 软件设计模式概述 2. GoF 的 23 种设计模式的分类和功能 3. UML中的类图及类图之间的关系 4. 开闭原则——面向对象设计原则 5. 里氏替换原则——面向对象设计原则 6. 依赖倒置原则——面向对象设计原则 7. 单一职责原则——面向对象设计原则 8. 接口隔离原则——面向对象设计原则 9. 迪米特法则——面向对象设计原则 10. 合成复用原则——面向对象设计原则 11. 创建型模式的特点和分类 12. 单例模式(单例设计模式)详解 (1)饿汉式 ①声明静态私有类变量,且立即实

23 种设计模式的分类和功能

设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分. 1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”.GoF 中提供了单例.原型.工厂方法.抽象工厂.建造者等 5 种创建型模式. 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理.适配器.桥接.装饰.外观.享元.组合等 7 种结构型模式. 行为型模式:

GOF 的23种JAVA常用设计模式总结 01 设计模式的概念分类和功能

1.简介 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案.也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用.其目的是为了提高代码的可重用性.代码的可读性和代码的可靠性. 2.设计模式的分类 根据模式的目的分类 根据模式的作用范围分类 3.根据目的分类 创建型模式:特点:将对象的

23种设计模式介绍以及在Java中的实现

原创不易,转载请注明出处:http://anxpp.com/,谢谢!     文章比较长,读者可以通过顶端的目录选择要了解的模式,然后通过文章右边的按钮快速返回顶部重新选择一个新的模式浏览 博主精心准备了大量的示例代码.文章尽量提供与编程相关的例子,而不是像多数其他介绍的文章一样,提供一些感觉挺滑稽的例子(那样的例子可能看完觉得写得很好,然而还是不会用...). 本文耗费了作者大量时间,还请亲们给个赞O(∩_∩)O~ 也可以通过CTRL+F并输入要了解的模式并跳到对应位置. 文章中的示例源码在g

Java之23种设计模式解析

一.设计模式概述 总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式.结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式.具体如下:其中创建型有: 一.Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二.Abstra

JAVA开发的23种设计模式之 --- 桥接模式

桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.    应用场景        实现系统可能有多个角度分类,每一种角度都可能变化.    解释:桥接模式将继承模式转化成关联关系,他降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量.    理解抽象化,实现化,解耦        抽象化:将复杂物体的一个或几个共同的特性抽出去而只注意其他特性的行动或过程.在java面向对象中抽象化就

JAVA设计模式总结之23种设计模式

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