![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
二月十六
数据库交流群:195233677
展开
-
设计模式——工厂模式
工厂模式有三种,简单工厂,工厂模式和抽象工厂模式,严格来说简单工厂模式不算是一种设计模式。它们的主要作用就是根据不同的条件来产生不同的对象,而不需要大量的去new对象。这次先了解一下简单工厂和工厂模式。工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jave论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象...原创 2018-04-06 17:00:58 · 3933 阅读 · 0 评论 -
设计模式——模板模式
模板模式就是定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。但调用将以抽象类中定义的方式进行。两个角色:抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。何时使用:有一...原创 2018-04-07 11:23:06 · 3840 阅读 · 0 评论 -
设计模式——观察者模式
观察者模式是一种一对多的设计模式,一个主题多个观察者,当主题发生某种变化时,会发通知给这些观察者,所有的观察者都可以进行各自内部的改变。有时观察者模式也被称为发布订阅模式。观察者涉及到四个角色: 抽象主题(Subject):抽象主题提供一个接口,定义增加和删除观察者对象,给观察者发送通知等方法。具体主题(ConcreteSubject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任...原创 2018-04-07 11:25:04 · 4013 阅读 · 0 评论 -
设计模式——迭代器模式
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。C#和PHP自己已经实现了这个模式,例如C#里边的foreach方法。当我们要访问一个聚集而又不需要知道它内部结构的时候,可以考虑用迭代器模式,迭代器模式遍历是由它内部提供的方法实现的。迭代器模式有四个角色:迭代器:迭代器定义访问和遍历元素的接口具体迭代器:具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置聚合:聚合定义创...原创 2018-04-07 11:27:22 · 3899 阅读 · 0 评论 -
设计模式——责任链模式
责任链模式,一个对象包含一个处理方法和一个传递给别人的方法,在它需要处理一个问题的时候,如果它能处理,那它就处理,如果处理不了,那么它就传递给下一个人来进行处理,下一个人也进行同样的操作,直到处理完或者没人能处理的了。责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并...原创 2018-04-07 11:29:17 · 3773 阅读 · 0 评论 -
设计模式——命令模式
命令模式,是对命令的封装,把客户端的请求封装成一个对象然后传入系统内部。实际上是一种对命令请求、命令、执行三者的解耦设计。因此这个模式涉及到的角色中有调用者和接收者两个角色,是想设计成低耦合的状态,提高灵活性。涉及到的角色:抽象命令类:定义命令的统一接口。具体命令类:Command接口的实现者,用来执行具体的命令,某些情况下可以直接用来充当Receiver。接收者:命令的实际执行者请求者:命令的请...原创 2018-04-07 11:30:22 · 4130 阅读 · 0 评论 -
设计模式——备份模式
备份设计模式,需要备份的对象自身有备份录,外部还有一个备份的管理者,当对象中有对象需要备份的时候,自己生成一个备份录并在管理者中进行管理,当对象数据需要恢复的时候,在从管理者中得到备份录,供对象进行数据恢复。备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对...原创 2018-04-07 11:31:55 · 4368 阅读 · 0 评论 -
设计模式——状态模式
状态模式,当对象中的某些属性发生变化时,对象对外的行为也发生变化。在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的判断就显得“力不从心了”。随着增加新的状态或者修改一个状体(if else(或switch case)语句的增多或者修改)可能会引起很...原创 2018-04-07 11:33:00 · 4105 阅读 · 0 评论 -
设计模式——访问者模式
封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。我觉得用到这种模式的情况很少,这个模式也不是很容易理解。访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问...原创 2018-04-08 08:08:37 · 4218 阅读 · 0 评论 -
设计模式——中介者模式
中介者模式,对象与对象之间通讯,如果是一对一的非常简单,对象A告诉对象B做什么,B就做什么就好了,但是如果是不是一对一之间的通讯呢?中间的结构就会很多很混乱,当一个对象发生变化的时候,其他的对象可能也需要跟着一起变化,这就引出了中介者模式。用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。涉及到三个角色:抽象中介者:定义好同...原创 2018-04-08 08:08:42 · 3959 阅读 · 0 评论 -
设计模式——策略模式
策略模式是一种算法的封装,把算法本身和使用分割开来。一个抽象类,每个具体算法都是这个抽象类的具体实现,然后在context中定义一个算法类,并且赋值为传进来的算法对象,不同的算法传入不同的算法对象。各个算法之间位置相等,可以相互替换。策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发...原创 2018-04-07 11:21:37 · 3864 阅读 · 0 评论 -
设计模式——享元模式
享元模式主要是把常用的对象放到内存中,用的时候直接从内存中读取,而不是再次重新新建,减少内存占用量,提高效率。享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。这就是享元模式。享元模式涉及到三个角色:享元工厂...原创 2018-04-07 11:18:50 · 3905 阅读 · 0 评论 -
设计模式——组合模式
组合模式是数据结构中的树,拥有多级树形菜单的结构,有的时候一个系统可能很复杂,处理起来很麻烦,但是他们拥有类似的东西,我们可以设计成组合模式,用递归来处理复杂的问题,如同处理一个简单的功能一样。从而实现客户和复杂系统内部的解耦。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。三个角色:抽象构件角色(component):是组合中的对象声明接...原创 2018-04-07 11:14:31 · 4064 阅读 · 0 评论 -
设计模式——抽象工厂模式
抽象工厂是对工厂模式的进一步抽象,可以说工厂生产的是对象,而抽象工厂生产的是工厂,比起工厂模式多了一个产品族的概念。产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。例如软件中选择MySql+PHP可以是一个产品,而选择MSSQL+.NET也是一种产品,这两者就是产品族的概念,不再单单是语言或者数据库(个人理解)。和工厂模式一样涉及到四个角色:抽象工厂角色:这是工厂方法模式的核心,它与...原创 2018-04-06 17:11:06 · 4244 阅读 · 0 评论 -
设计模式——单例模式
单例模式是想实现一个类在系统中只有一个实例的解决方法,在实际的开发中,许多场景需要这样的单例,或者是为了提高性能减少开销也需要这样设计。单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静...原创 2018-04-06 17:14:57 · 4303 阅读 · 0 评论 -
设计模式——建造者模式
建造者模式和工厂模式很类似,不过添加了一个导演的角色,导演是创建产品的,它负责利用创造者来组建产品并且返回一个产品,但是导演不和产品又具体关系。导演类总体来说是比较灵活不固定的部门,不像产品和创造者那样固定。一般建造者模式包含四个角色:Dirextor: 导演(指挥者)类,用于统一组装流程。Builder:抽象Builder类,规范产品的组建,一般是由子类实现。ConcreteBulider: 抽...原创 2018-04-06 17:17:58 · 4344 阅读 · 0 评论 -
设计模式——原型模式
Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。主要是两个类,一个抽象的原型类和一个实现类,实际开发中单独应用的原型模式得比较少,一般都是和其他设计模式混合使用。意图:用原型实例指定创建对象...原创 2018-04-06 17:20:55 · 4344 阅读 · 0 评论 -
设计模式——适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。举个例子,欧式的插头在中国用不了,中间就需要一个转换器,让欧式插头可以在中国的插板上使用。适配器模式分为类适配器模式和对象适配器模式。类适配器模式采用继承的方式来实现,而对象适配器模式则是采用对象组合的方式来实现,开发过程中根据实际情况来进行选择。涉及到的角色:目标接口(Tar...原创 2018-04-06 17:23:43 · 4151 阅读 · 0 评论 -
设计模式——装饰者模式
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。使真实的对象具有它本来不具备的功能。主要涉及到的角色:Component(被装饰对象基类)ConcreteComponent(具体被装饰对象)Decorator(装饰者基类)ContreteDecorator(具体的装饰者类)意图:动态地给一个对象添加一些额外的职责。就增加功能来说...原创 2018-04-06 17:27:54 · 4254 阅读 · 0 评论 -
设计模式——代理模式
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。主要有三部分组成:抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。目标对象角色:定义了代理对象所代表的目标对象。代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何...原创 2018-04-06 17:31:30 · 3999 阅读 · 0 评论 -
设计模式——外观模式
外观模式,是一种把子系统和客户端做松耦合操作的一个设计模式。这样客户端调用系统,根本不需要知道系统内部是如何操作的,只需要调用外部“接待员”即可,所以即使子系统有变化时,也不需要客户端做改变,达到松耦合的效果。我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。外观模式包含三个角色:外观角色(Facade):是模式的核...原创 2018-04-06 17:33:15 · 4123 阅读 · 1 评论 -
设计模式——桥接模式
桥接模式也是一种解耦的设计模式,是把抽象和实现进行解耦,使得二者独立。在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。主要的角色:抽象化(AbstractRoad)角色:抽象化给出的定义,并保存一个对实现化对象的引用。修正抽象化(...原创 2018-04-06 17:37:24 · 4001 阅读 · 0 评论 -
设计模式——解释器模式
解释器模式顾名思义,就是给定句子和文法,然后进行解释的一种设计模式。是一种应用很少的模式,涉及到文法、语义等东西,没有基础很不好理解,更容易把设计的模式变得一坨一坨的,不容易维护更不容易理解。解释器模式涉及到四个角色:抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。终结符表达式(Terminal ...原创 2018-04-08 08:08:48 · 10209 阅读 · 1 评论