23种设计模式介绍及其分类

设计模式这一概念的诞生来源于1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》这一本书,其中一共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,称之为GoF设计模式或者设计模式GOF23。这23种设计模式并不似不是语法结构,而是对软件开发过程中最基本的面向对象设计原则、面向对象的三大基本特征(封装性、继承性和多态性)以及类的与类之间的关联、组合关系进行的经验总结,从而来提高代码可复用性、可维护性、可读性、稳健性以及安全性。所以它就是前人在干活的过程中对于经验的总结,什么情况怎么做比较好,比较合理。就好比峨眉山的挑山工人,他们挑担子的时候身体都会节奏型的抖动,其实并没有人要求他们这么做,他们也可以不这么做,只是这么做会轻松点,这就是挑山工人的挑担模式(瞎编的....)。
       这23种设计模式按照工作类型(干了什么)来划分可以分为创建型模式、结构型模式和行为型模式,每种类型有分别具体包括:
创建型模式:
     单例模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
     工厂模式:提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。应用最广的地方就是jdk中以及Spring和Struts框架中。而工厂模式又有三种简单工厂模式、工厂方法模式以及抽象工厂模式
     抽象工厂模式:提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。看起来和工厂模式很像,但有一些区别,那就是工厂模式是用来创建同一个产品的不同类型的,但是抽象工厂模式是用来创建不同类的产品
     建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,即一个房子可以分解成砖头、钢筋、石灰等组成,虽然房子是由这些组成的,但建筑的方式和方法以及这些组成的使用顺序都可以事不同的。
     原型模式:将一个对象作为原型,对其进行复制、克隆,产生一个和原对象相似的新对象。
结构型模式:
    适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。就好比你的苹果手机和安卓手机的数据线不一样,通过一个转换接口能够使得两个数据线在安卓/苹果手机上都能够使用。
    桥接模式:基于类的最小设计原则,使用封装、聚合及继承等行为,把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
    装饰模式:是继承关系的一个替代方案,通过使用对象之间的关联关系来取代类之间的继承关系,从而能够动态的给一个对象添加一些额外的功能。
    组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
    外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
    享元模式:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。
    代理模式:为其他对象提供代理以控制这个对象的访问。代理模式分为动态代理、静态代理、还有CGLIB动态代理
行为型模式:
    模版方法模式:父类就是模板,它包含很多不同的业务的重复代码,但是这些方法都是交由字类来实现。即父类只定义一个处理步骤,但是具体的实现交给对应子类来实现。
    命令模式:是将各种请求通过命令的方式封装成对象,请求和响应都以命令对象进行交互。请求先以命令的形式被封装在对象中,然后传给调用的对象。调用对象再寻找可以处理该命令的合适的执行对象,并把该命令传给相应的执行对象,执行对象再执行命令。这样方便将命令对象进行储存、传递、调用、增加与管理。
    迭代器模式:提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据
    观察者模式:定义一系列对象之间的一对多关系,当一个对象改变、更新状态时,依赖它的都会收到通知改变或者更新。
    中介者模式:房地产中介是一种中介,如果我们要和买房或者卖房的交流,则需要通过中介进行沟通,并不需要知道对方是谁,也并不需要面对面,类似于电话、QQ、微信等等都是中介,能大大降低了沟通的复杂性。所以中介者模式定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。
    备忘录模式:我们有些时候为了防止忘记做某事,会再手机上写个备忘录,进行提醒自己,那么备忘录模式和备忘录类似么?其实备忘录模式更类似于玩游戏的存档或者git托管应用。备忘录模式是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
    解释器模式:是一种按照规定的语法进行解析的模式。通过给定一种语言,并且定义它的一种表示,再定义一个解释器,解释器通过使用表示来解释语言中的句子。
    状态模式:允许一个对象在其内部状态改变时改变它的行为。就好比我们每天早上精神好,中午就有点累,需要休息会,下午起来精神又好了,晚上需要睡觉,这就是我们的状态模式,状态模式将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
    策略模式:对于一组算法,可以将每一种算法都封装到具有共同接口的独立的类中,从而使得它们可以相互替换。比如我们定义一个具有说的方法的接口,那么在调用的时候具体说什么则由具体的实现来实现,比如狗说汪汪,猫说喵喵。。。
    职责链模式:为了避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
    访问者模式:封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。就好比你是一个记者(采访者),你采访一个明星,你通过对他的采访和他的回答,你可以写新闻稿来描述和报道这个事情(新的操作)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值