设计模式名录

本文给出了经典的23种设计模式的名录,包括他们的分类、名称、定义以及简要说明,方便大家能够快速的回忆起他们。也是前面写过的或者后面将要写的设计模式的一个目录。更是为了能督促自己能将这一个系列能坚持写完.

一.创建型

这个部分的主要任务就是使用各种方法创建(或组合)各种类型的对象,并向对象的使用者隐藏对象的创建过程。

1.抽象工厂模式(Abstract Facory Pattern)

定义一个接口(抽象工厂),用于创建一系列相关或相互依赖的对象,而不需要指定它们的具体类型.

       在应用抽象工厂过程中,组件通过一系列的抽象工厂决定最终的结构,而组件的使用者则必须选择使用其中一个抽象工厂来创建自己所需结构的组件对象.抽象工厂一般扮演组件结构标准制度者的角色.

       请参考*****

2.生成器模式(Builder Pattern)

将一个复杂对象的构建与 它的表示分开,使得同样的构建过程可以创建出不同的对象.

     与抽象工厂相似,在生成器模式中,组件同样是通过不同的生成器创建不同结构的对象,但不同的是,抽象工厂类型的接口是相同的,而生成器模式中可以通过不同的搭配构建不同结构的对象,相对于抽象工厂模式会更加灵活,但组件的使用者必须更加了解结构的细节.

      请参考****

3.工厂方法模式(Factory Method Pattern)

定义一个创建对象的接口,让子类(具体的创建者)决定实例化哪个类型的对象,目的是将对象的创建推迟到子类中完成,并向对象的使用者隐藏创建对象的过程与具体类型.

       对于一系列基于相同接口的子类型,可以通过使用工厂方法模式对使用者隐藏它们的具体类型和创建过程,而对于组件的使用者来讲,则可以简化对这一系列组件类型的应用.

      请参考****

4.原型模式(Prototype Pattern)

用原型模式实例指定创建对象的种类,并且通过复制这个原型来创建新的对象.

       通过一个对象的复制创建更多的对象,这样有两方面的优势:一是可以隐藏复杂对象的创建过程,而是可以提高对象的创建效率.

     原型模式中复制对象时经常使用对象的Clone()方法来完成,在C#中,你可以通过实现ICloneable接口来实现.

    请参考***

5.单件模式(Singleton Pattern)

确保一个类只有一个实例,并提供一个全局访问点.

请参考***

二.结构型

结构型一般用于软件的架构设计,它们让一个软件体系更富有弹性,使之更容易进行修改、扩展和维护。

1.适配器模式(Adapter Pattern)

创建一个适配器组件作为中间人,它提供接口的转换功能,使两个不相关的或不兼容的组件可以一起工作.

      请参考***

2.桥接模式(Bridge Pattern)

将抽象部分与它的实现部分分开,使它们都可以独立地变化.

请参考***

3.组合模式(Composite Pattern)

将对象组合成树状结构来表现”整体/部分”层次结构,使用客户可以采用一致的方式来处理个别对象以及对象组合.

      请参考***

4.装饰者模式(Decorator Pattern)

动态地将功能添加到对象上,相比生成子类更灵活、更富有弹性。

请参考设计模式学习--装饰者模式(Decorator Pattern)

5.外观模式(Facade Pattern)

为子系统中的一组接口提供一个一直的接口,定义了一个高层接口,这个接口使得这一子系统更加容易使用.

批处理的工作方式.请参考***

6.享元模式(Flyweight Pattern)

定义:运用共享技术有效的支持大量”轻量级”的对象.使用享元模式时,我们只创建一个实例来管理大量的虚拟对象.

     请参考****

7.代理模式(Proxy Pattern)

定义:为其它对象提供一个代理(占位标识)以控制对这个对象的访问.

代理模式一般用于处理开销很大的对象,这时,应该根据需要在必要的时候才创建或载入这些资源.

       比如,当你打开一个比较大型的、图文并茂的Work文档,你会发现文字会很快的显示出来,而图片可能在你查看到它的时候才会显示出来。在这里,我们可以认为Word在处理文档时使用了代理模式.我们知道,图片的处理对于系统来讲,开销会比较大,所以,在word中,当我们打开一个大型文档时,图片的位置会有一个占位符(代理),然后在需要时(比如我们查看到这部分时),才会加载这些图片,这样就节约了系统资源,提高了处理速度与运行效率.

       请参考****

三、行为型

行为模式用于做一些具体的工作,如实现某个软件功能,它们的作用往往比前两种类型的设计模式更加直观。

1.职责链模式(Chain Of Responsibility Pattern)

定义:为解除请求的发送与接收之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连成一条链,并沿着这条链传递该请求,直到一个对象处理它.

就像在流水线上生产一样,一道工序中可能有多个工人在处理,如果有人处理了就转到下一道工序(或者就此完工),如果没有人加工它,它可能继续在流水线中流转,也可能做其它类型的处理.

      此模式一般用于操作系统或网络环境的应用.请参考****

2. 命令模式(Command Pattern)

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作.

  比如,在大型数据库系统中的日志(Log).日志用于记录对数据库的一切操作,需要时我们可以将数据库恢复到任一时刻的状态.

3.解释器模式(Interpreter Pattern)

定义:为一种语言或一套语法创建解释器.

4.迭代器模式(Iterator Pattern)

定义:提供一种方法顺序访问一个集合中的各个元素,而又不需要暴露该对象的内部表示.

        请参考****

5.中介者模式(Mediator Pattern)

定义:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使这些对象之间解耦,并可以独立地改变它们之间的交互.

中介者模式经常使用在大型的系统中,用于各子系统或对象之间运行调度工作.你应该知道房屋中介和婚姻中介是怎么回事吧,这也差不多.

         请参考****

6.备忘录模式(Memento Pattern)

定义:在不被破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到保存状态.

  和命令模式不一样的是,备忘录虽然也保存对象的状态,但它并不是完整的、队列化的保存,而是保存某一时刻的对象状态,在你需要恢复时,只能恢复到保存过的时刻。比如保存游戏进度。

       请参考****

7.观察者模式(Observer Pattern)

定义:观察者模式定义了对象之间一对多的依赖关系,当这个对象的状态改变时,它会通知所有的依赖者(观察者)接收新的数据,这些依赖者对象会根据最新的数据做出相应的更新.

         请参考*****

8.状态模式(State Pattern)

定义:允许对象在内部状态改变时改变它的行为和特性,对象看起来好像修改了它的类.

请参考设计模式学习--状态模式(State Pattern)

9.策略模式(Strategy Pattern)

定义:定义了一系列的算法,将它们独立封装,并且可以相互替换使用,这些算法独立于使用它们的组件,可以在组件中通过组合,灵活的改变其算法类型.

请参考项目重构--使用策略模式

10.模板方法模式(Template Method Pattern)

定义:定义一系列的算法结构,并延续到其子类,子类在不改变算法结构的同时,可以定义自己的具体实现.

     请参考*****

11.访问者模式(Visitor Pattern)

定义:对于组件中的操作,可以在不改变类型定义的前提下重新定义操作的具体实现.

    请参考****

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

JavaScript是如何处理事件?

#思特沃克好声音# (图片:网络) 想必大家都知道JavaScript一般都是在浏览器中执行,大家也知道可以通过事件调用JavaScript函数,可是大家清楚J...

2696
来自专栏程序员宝库

这些 Java 面试题必须会---鲁迅

写在前面 春天来了,万物复苏的季节到了. 许多程序猿安奈不住生理需求,我要涨工资,我要跳槽. 毕竟金三银四嘛. 那么要从众多的面试者中获得求职机会,我们就要面对...

28010
来自专栏web前端教室

《JS回调是怎么回事》 | 7月28日微课 文字版

image.png 大家好,今晚的微课主要讲一个JS的回调。 这段时间51题练习群里有同学问回调是怎么回事?这个问题我竟然一时无法回答,因为简单的说就一句话,当...

18610
来自专栏极客猴

Python定时任务(上)

在项目中,我们可能遇到有定时任务的需求。其一:定时执行任务。例如每天早上 8 点定时推送早报。其二:每隔一个时间段就执行任务。比如:每隔一个小时提醒自己起来走...

1101
来自专栏佳爷的后花媛

java学习要点

作为一个程序员,在找工作的过程中,都会遇到笔试,而很多笔试里面都包括java,尤其是作为一个Android开发工程师,java是必备技能之一.所以为了笔试过程中...

1085
来自专栏用户画像

浅析JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模...

682
来自专栏喔家ArchiSelf

全栈必备 Java基础

那一年,从北邮毕业,同一年,在大洋的彼岸诞生了一门对软件业将产生重大影响的编程语言,它就是——Java。1998年的时候,开始学习Java1.2,并在Java ...

704
来自专栏不会写文章的程序员不是好厨师

[翻译]Java 6,7,8中的String.intern

最近一直在关注“故障排查”的相关知识,首先着手的是OOM的异常。OOM异常通常会有Perm区的OOM(java7及以前)和HeapSpace的OOM,这两种各有...

712
来自专栏架构师小秘圈

深入理解Java的接口和抽象类

架构技术干货第一时间送达! 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方...

3235
来自专栏向治洪

java虚拟机构造原理

 Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三...

1826

扫码关注云+社区