什么是设计模式?
设计模式是一套被重复应用的、通过分类编目标、代码设计教训的总结,应用设计模式是为了可重复使用代码,让代码更容易被别人了解并且进步代码的可靠性。
能够说设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该计划形容了对象和类之间的相互作用。
基本要素
名称
模式名称是用来反映形容模式的问题,解决方案和成果,不便开发人员之间的交换与更好的了解设计模式,大多数设计模式都是依据性能来命名的,如 xxxFactory。
问题
形容了应该在何时应用模式,蕴含了原始设计中存在的问题以及问题存在的起因。
解决方案
形容了设计模式的组成部分,以及这些组成部分之间的互相关系,各自的职责和合作形式。
成果
形容了设计模式的利用状况以及在应用模式时应该衡量的问题,蕴含设计模式的优缺点。没有任何一个解决方案是完满的,因而在抉择设计模式的时候须要进行正当的抉择。
设计模式的分类
能够依据目标 (用来做什么的) 分类,将模式分为:创立型、结构型、行为型。也能够依据范畴 (解决类之间的关系还是解决对象之间的关系) 分类,将模式分为:类模式、对象模式,如下所示:
设计模式阐明
形象工厂模式
提供一个创立一系列相干或相互依赖对象的接口,而无需指定它们具体的类
建造者模式
将一个简单对象的构建与它的体现拆散,使得同样的构建过程能够创立不同的示意
工厂办法模式
定义一个用于创建对象的接口,然而让子类决定将哪一个类实例化。工厂办法模式将一个类的实例化提早到其子类
原型模式
应用原型实例指定待创建对象的类型,并且通过复制这个原型来创立新的对象
单例模式
确保一个类只有一个实例,并提供一个全局拜访点来拜访该实例
适配器模式
将一个类的接口转换成客户心愿的另一个接口,适配器模式让那些接口不兼容的类能够一起工作
桥接模式
将形象局部与实现局部解耦,使得两者都可能独立变动
组合模式
组合多个对象造成树形构造以示意具备局部 - 整体关系的层次结构。组合模式能够让客户端对立看待单个对象和组合对象
装璜模式
动静的给一个对象减少一些额定的职责,就扩大性能而言,装璜模式提供了一种比应用子类更加灵便的代替计划
外观模式
为子系统中的一组接口提供对立的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易应用
享元模式
使用共享技术无效地反对大量细粒度对象的复用
代理模式
给某一个对象提供一个代理或占位符,并由代理对象来管制原对象的拜访
责任链模式
防止一个申请的发送者和接收者偶合在一起,让多个对象都有机会解决申请。将接管申请的对象连接成一条链,并沿着这条链传递申请,直到有一个对象可能解决它为止
命令模式
将一个申请封装成一个对象,从而可用不同的申请对客户进行参数化,对申请排队或者记录申请日志,以及反对可撤销操纵
解释器模式
给定一种语言,定义它的文法的一种示意,并定义一个解释器,这个解释器应用该示意来解释语言中的句子
迭代器模式
提供一种办法程序拜访一个聚合对象中的各个元素,而又不裸露该对象的外部示意
中介者模式
定义一个对象来封装一系列对象的交互,中介者模式使各个对象之间不须要显示地互相援用,从而使其耦合涣散,让你能够独立地扭转它们之间的交互
备忘录模式
在不毁坏封装的前提下,捕捉一个对象的外部状态,并在该对象之外保留这个状态,这样能够在当前将对象复原到原先保留的状态
观察者模式
定义对象之间的一种一对多的依赖关系,使得每当一个对象状态产生扭转时,其相干依赖对象皆失去告诉并被自动更新
状态模式
容许一个对象在其外部状态扭转时扭转它的行为
策略模式
定义一系列算法,将每一个算法封装起来,并让它们能够互相替换,策略模式让算法能够独立于应用它的客户变动
模板办法模式
定义一个操作中算法的框架,而将一些步骤提早到子类中,模板办法模式使得子类能够不扭转一个算法的构造就能够重定义该算法的某些特定步骤
访问者模式
示意一个作用于某对象构造中的各个元素的操作,访问者模式让你能够在不扭转各个元素的类的前提下定义作用于这下元素的新操作
设计模式的长处
- 交融了泛滥专家的教训,并以一种规范的模式给宽广开发人员应用,提供通用的设计词汇和开发语言,不便开发人员交换。让设计方案更加通俗易懂,使不同编程语言的开发和设计人员能够通过设计模式来交换零碎设计方案,设计模式能够升高开发人员了解零碎的复杂度。
- 让开发人员能够更简略地复用胜利的设计和体系结构,使得重用胜利的设计更加容易,并防止导致不可重用的设计方案。
- 让设计方案更加灵便,易于批改。在很多设计模式中宽泛应用了开闭准则、依赖倒置准则等面向对象设计准则,让零碎有较好的可维护性,真正实现了可维护性的复用。在软件开发中正当应用设计模式,能够使零碎中的一些组成部分在其它零碎失去重用,而在此基础上进行二次开发天然不便得多。
- 设计模式是通过屡次实践证明的无效解决方案,且通常是针对某一类问题的最佳设计方案,因而设计模式的应用进步软件系统的开发效率和软件品质,在肯定水平上节约设计老本。
- 有助于开发人员更深刻地了解面向对象思维,还能够进步开发人员的设计程度和代码品质。