设计模式名录

本文给出了经典的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 条评论
登录 后参与评论

相关文章

来自专栏逆向技术

C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原

      C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原 我们以前讲SEH异常处理的时候已经说过了,C++中的Try catch...

24010
来自专栏Jerry的SAP技术分享

Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问“茴香豆的茴字有哪几种写法?”

3.2K3
来自专栏猿人谷

用C来实现内存池

介绍:        设计内存池的目标是为了保证服务器长时间高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,...

5387
来自专栏IT技术篇

gcc 编译参数 -fno-strict-aliasing

  最近在项目中遇到一个问题,当使用double类型数据时,在进行jce编解码后会出现乱数据问题,比如encode一个数据.

62727
来自专栏Java技术栈

Java多线程sleep和wait的区别,总结得非常好。

我们都知道sleep是让线程休眠,到时间后会继续执行,wait是等待,需要唤醒再继续执行,那么这两种方法在多线程中的表现形态,它们各有什么区别呢? 可以总结为以...

3598
来自专栏Java编程技术

基于rxjava的生产消费模型

最近在看springcloud的熔断机制的实现,发现底层使用的rxjava实现,就看了下rxjava的使用,发现rxjava使用可也便捷实现前面讲解的定时生产与...

922
来自专栏北京马哥教育

【干货】Python自动化审计及实现

本文由马哥教育Python自动化实战班导师wayne推荐,作者为SSS团队,转载自互联网,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。...

37810
来自专栏李家的小酒馆

Sublime 正则替换

1344
来自专栏木木玲

设计模式 ——— 状态模式

1222
来自专栏PHP在线

给PHP开发者讲讲PHP源码-第一部分

作为一个开发者,我发现在我的日常工作中越来越多地查看PHP的源码。在为了弄清楚奇怪的边界问题和为什么某些问题应该发生的却没有发生而去理解背后究竟发 生了什么事情...

57110

扫码关注云+社区

领取腾讯云代金券