课堂做业06_23种设计模式

设计模式普遍用于面向对象的开发和设计中,成为面向对象的重要组成部分。设计模式只在必定的抽象层次上讨论模式。设计模式做为一个专有名词,特指在特定场景下解决通常设计问题的类和相互通讯的对象的描述。像链表、hash表这样的设计,通常不称做设计模式,而那些包括复杂的、特定领域内的对整个应用或子系统的架构的设计也不是设计模式所讨论的范围 。算法

设计模式的定义为:设计模式是一种被反复使用、多人知晓的、通过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被人理解、保证代码的可靠性。设计模式是软件工程的基石,如同大厦的一块块砖石同样。设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化。项目中合理的运用设计模式能够完美的解决不少问题,每种模式在如今中都有相应的原理来与之对应,每个模式描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被普遍应用的缘由。设计模式

设计模式根据目的可分为:建立型、结构型、行为型。建立型模式主要用于建立对象;结构型模式主要用于处理类和对象的组合;行为型模式主要用于描述对类或对象怎么交互和怎么分配职责。数据结构

建立型模式:架构

1.简单工厂性能

简单工厂模式是由一个工厂对象决定建立出哪种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,能够理解为是不一样工厂模式的一个特殊实现。加密

2.工厂方法模式设计

    是简单工厂模式的延伸。工厂父类负责定义建立产品对象的公共接口,而子工厂负责具体生产具体的产品对象。所谓的决定并非批模式容许子类自己在运行时作决定,而是指在编写建立者类时,不需知道建立的产品是哪一下,选择了使用哪一个子类,就决定了实际建立的产品是什么。代理

3.抽象工厂模式视频

在抽象工厂模式中,接口是负责建立一个相关对象的工厂,不须要显式指定它们的类。每一个生成的工厂都能按照工厂模式提供对象。提供一个建立一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决接口选择的问题。对象

4.建造者模式

将一个复杂的构建与其表示相分离,使得一样的构建过程能够建立不一样的表示。主要解决:在软件系统中,有时候面临着"一个复杂对象"的建立工做,其一般由各个部分的子对象用必定的算法构成;因为需求的变化,这个复杂对象的各个部分常常面临着剧烈的变化,可是将它们组合在一块儿的算法却相对稳定。

5.原型模式

用原型实例指定建立对象的种类,而且经过复制这些原型建立新的对象。既能用于建立重复的对象,同时又能保证性能。主要解决:在运行期创建和删除原型。

6.单例模式

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地建立与销毁。这种模式涉及到一个单一的类,该类负责建立本身的对象,同时确保只有单个对象被建立。这个类提供了一种访问其惟一的对象的方式,能够直接访问,不须要实例化该类的对象。

结构型模式

1.适配器模式

将一个接口转化为客户但愿的另外一个接口,适配器模式使接口不兼容的类一块儿工做。是两个不兼容类的桥梁。主要解决:在软件系统中,经常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能知足的。

例如:加密模块在此基础上实如今不修改现有类的基础上重用第三方加密方法。

2.桥接模式

将抽象部分与实现部分分离,使它们均可以独立的变化。主要解决:在有多种可能会变化的状况下,用继承会形成类爆炸问题,扩展起来不灵活。

例如:跨平台视屏播放器。

3.组合模式

组合多个对象造成树形结构以表示“总体-部分”的结构层次。组合模式使得用户对单个对象和组合对象的使用具备一致性。主要解决:它在咱们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序能够向处理简单元素同样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

例如:文件夹的树形结构访问。

4.装饰模式

动态地给一个对象添加一些额外的职责。就增长功能来讲,装饰器模式相比生成子类更为灵活。主要解决:通常的,咱们为了扩展一个类常用继承方式实现,因为继承为类引入静态特征,而且随着扩展功能的增多,子类会很膨胀。

例如:在原有基础上实现多重加密。

5.外观模式

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:下降访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

例如:文件加密。加密的过程包括三个操做:读取文件、加密、保存加密以后文件。

6.享元模式

运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会形成内存溢出,咱们把其中共同的部分抽象出来,若是有相同的业务请求,直接返回在内存中已有的对象,避免从新建立。

7.代理模式

    为其余对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题。

行为型模式

1.职责链模式

避免请求发送方与接收方耦合在一块儿,让多个对象均可以接收请求,将这些对象链接一条链,而且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负责处理请求,客户只须要将请求发送到职责链上便可,无须关心请求的处理细节和请求的传递,因此职责链将请求的发送者和请求的处理者解耦了。

例如:按级别进行请假处理。

2.命令模式

    将一个请求封装成一个对象,从而使您能够用不一样的请求对客户进行参数化。

主要解决:在软件系统中,行为请求者与行为实现者一般是一种紧耦合的关系,但某些场合,好比须要对行为进行记录、撤销或重作、事务等处理时,这种没法抵御变化的紧耦合的设计就不太合适。

    例如:撤销操做的实现

3.解释器模式

    给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。

4.迭代器模式

提供了一种方法访问聚合对象,而不用暴露这个对象的内部表示。主要解决:不一样的方式来遍历整个整合对象。主要解决:不一样的方式来遍历整个整合对象。

    例如:电视遥控器实现对电视频道集合遍历操做。

5.中介者模式

    中介者模式(Mediator Pattern)是用来下降多个对象和类之间的通讯复杂性。这种模式提供了一个中介类,该类一般处理不一样类之间的通讯,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。用一个中介对象来封装一系列的对象交互,中介者使各对象不须要显式地相互引用,从而使其耦合松散,并且能够独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会致使系统的结构变得很复杂,同时若一个对象发生改变,咱们也须要跟踪与之相关联的对象,同时作出相应的处理。

6.备忘录模式

    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象以外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象以外保存这个状态,这样能够在之后将对象恢复到原先保存的状态。

7.观察者模式

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都获得通知并被自动更新。主要解决:一个对象状态改变给其余对象通知的问题,并且要考虑到易用和低耦合,保证高度的协做。

    例如:猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫则老鼠跑,够野跟着叫。

8.状态模式

容许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

主要解决:对象的行为依赖于它的状态(属性),而且能够根据它的状态改变而改变它的相关行为。

9.策略模式

定义一系列的算法,把它们一个个封装起来, 而且使它们可相互替换。主要解决:在有多种算法类似的状况下,使用 if...else 所带来的复杂和难以维护。

10.模板方法模式

定义一个操做中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法的结构便可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每个子类都从新写了这一方法。

11.访问者模式

主要将数据结构与数据操做分离。主要解决:稳定的数据结构和易变的操做耦合问题。

相关文章
相关标签/搜索