![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Design Patterns
拾毅者
长期关注机器学习,数据挖掘和人工智能领域。
展开
-
设计模式(一)单例模式Singleton—创建型
SINGLETON(单例模式)—对象创建型模式 单例其实就是唯一实例的意思,也就是说一个类只能有一个实例。开发人员都知道,在Java中,只要new一个类,就会创建这个类的实例,如果把这个类new多次,就会创建这个类的多个实例。有时候如果在程序运行时,不管new多少次,只需要这个类的一个实例,如日志记录中的管理类,要怎么处理呢?这是就需要用到单例模式。1. 问题原创 2015-04-24 10:56:05 · 1097 阅读 · 0 评论 -
设计模式(八)代理模式(Proxy)-结构型
Proxy 代理模式:解耦日常开发中的日志、权限、事务处理等。实现原理:一个抽象目标类即一个接口,有相关方法名;一个具体目标类,实现该接口和相关的方法;一个代理类,调用目标具体类并加上自己需要的逻辑;客户端实例化代理类,调用代理类的方法代理模式实现原理图 代理模式代理模式:是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转原创 2015-05-01 09:33:42 · 1195 阅读 · 0 评论 -
设计模式(九)组合模式(Composite)-结构型
组合模式Composite组合模式也叫合成模式,又叫树形模式,就是把部分和整体的关系用树形结构来表示,是的客户端对单个对象和组合对象的使用具有一致性,可以看出,这里的部分和整体之间在功能上是类似的,对于这种类似性,通常可以采用继承的方式来实现,根据面向对象的设计原则,尽量使用组合而非继承,因此合成模式也是继承的一个替换方案。1.组合模式结构 组合模式实现原理图 组合模式就是把部分和整体的关系用树原创 2015-05-01 10:40:18 · 1469 阅读 · 0 评论 -
设计模式(十五)模板方法模式(Template Method)-行为型
有很多个方法,在多个地方都会用到,为了减少多次重复的操作,选择模板方法模式将这些方法聚在一起做成一个模板形式,从而减少客户端的代码复杂度。实现原理图如下: 模板方法模式实现原理图 抽象的骨架类的示意代码如下:public abstract class Template { public void doSalary(){ operation1(); op原创 2015-05-13 12:55:21 · 1054 阅读 · 0 评论 -
设计模式(十六)中介者模式(Mediator)-行为型
中介者模式Mediator中介者模式又称作调停模式。 所谓中介,在我们生活中很是常见,我们买房子可以有中介公司,找兼职也可以有中介公司。以买房子为例。中介者把所有的买房人、卖房人的需求和特点都结合到一起,把适合的房子提供给合适的人。 首先我们要理解中介者模式的定义:用一个中介者对象来封装一系列对象的交互。中介者使得各对象不需要显式地相互引用,从而解耦合,独立改变他们之间的交互。实现原理图 中介原创 2015-05-13 13:02:16 · 1118 阅读 · 0 评论 -
设计模式(十八)职责链模式(Chain of Responsibility)-行为型
职责链模式(Chain of Responsibility)职责链模式在程序开发应用中十分广泛,经常使用在公文审批、出差报支等地方,职责链模式的作用就是将对象各自处理的职责分开,虽然职责很多,但是最终只有一个职责进行处理。实现原理图 职责链模式实现原理图应用struts2的拦截器,OA办公应用在职责链模式中,将条件语句改成多个职责类进行处理,如果不是自己处理,则自动转到下一个职责类,如果在转给下一原创 2015-05-16 14:19:43 · 1235 阅读 · 0 评论 -
设计模式(十九)状态模式(State)-行为型
状态模式(State)-行为型在职责链模式中,将条件语句改成多个职责类进行处理,如果不是自己处理,则自动转到下一个职责类,如果在转给下一个职责类进行处理前,需要修改当前的状态,此时就需要用到状态模式。 引例:电梯的运行过程,各种状态切换。实现原理图 状态模式实现原理图状态模式就是根据对象的状态不同,作出不同的行为。状态模式使代码中复杂而庸常的逻辑判断语句问题得到了解决,而且具体状态角色将具体状态原创 2015-05-16 14:23:18 · 962 阅读 · 0 评论 -
设计模式(十七)访问者模式(Visitor)-行为型
访问者模式Visitor访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。 定义(源于GoF《Design Pattern》):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 从定义可以看出结构对象是使用访问者模式必备条件,而且这个结原创 2015-05-15 14:11:57 · 1056 阅读 · 0 评论 -
设计模式(二十)解释器模式(Interpreter)-行为型
解释器模式Interpreter解释器模式在软件开发中应用的比较少,它主要用在底层的编程语言设计上,因此不太容易理解。 联想:传一个算数表达式,对加减乘除自动匹配,能够自动计算其结果。原理图 解释器模式实现原理图 单个运算符的数学公式计算机可以用来理解这个解释器模式的使用。参考文献[1] 郭峰.深入浅出设计莫模式[M].中国铁道出版社,2013(1):415-423.原创 2015-05-16 14:28:45 · 1127 阅读 · 0 评论 -
设计模式(二十二)命令模式(Command)-行为型
引文:后面几篇的设计模式,都比较不常用,就不详细分析了,只给出个原理图,以后用到了,再补加完整吧。命令模式Command银行排队取号,取得号就相当一个命令,先把这些命令放到一个list里面,然后依次读出来,不同的命令到不同的方法执行,然后到相应的窗口去服务。原理 命令行模式实现原理图 命令模式就是把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,队请求队列或者原创 2015-05-22 13:33:56 · 1237 阅读 · 0 评论 -
设计模式(十四)迭代器模式(Iterator)-行为型
大清晨,发一篇博文提提神吧。迭代器模式(Iterator)在软件开发过程中,经常需要将某一类的对象放在一个集合里,或者放在容器里,这个时候通常需要对集合或容器里的对象进行访问,很明显,对容器或集合里的对象访问必然涉及遍历,这就是迭代器模式。迭代模式实现原理图 迭代器模式实现原理图实现迭代器角色负责定义访问和遍历元素的接口,它的示例代码如下: Iterator.javapublic interfa原创 2015-05-12 09:04:10 · 1334 阅读 · 0 评论 -
设计模式(十一)装饰者模式(Decorator)-结构型
装饰者模式Decorator在程序开发中,有时候开发人员会使用继承来扩展对象的功能,用户的需求是多变的,也就造成了使用继承会造成代码的大范围改动,其实扩展对象的功能,采用组合比继承要好的多,当用户需要变动时,只要将对象组合发生变化就可以了,不会大范围地改动继承的代码,此时就需要使用装饰者模式。 装饰者模式的本质就是为了扩充软件的功能,但又不改变软件原本的功能。就好比装修房子一样。 Decorat原创 2015-05-04 10:02:54 · 1096 阅读 · 0 评论 -
设计模式(十二)桥模式(Bridge)-结构型
桥模式Bridge引文根据面向对象的设计原则,应该尽量使用组合而不是继承。桥模式将抽象与其实现解耦,使他们可以分别独立地变化,是继承的一种代替方式。 对于两个类之间需要进行关联时,不要直接在一个类的代码中调用另一个类的代码,而是要通过这些设计模式,在两个类之间建立一个类似的缓冲器的类,从而将直接关联的两个类进行解耦,以保证以后当一个类的接口发生变化时不会影响另一个类的使用。实现原理图 桥模式实现原创 2015-05-04 13:48:32 · 1209 阅读 · 0 评论 -
设计模式(四)原型模式(Prototype)-创建型
原型模式Prototype原型模式也是创建模式的一种,顾名思义,就是创建一个和原来一模一样的新对象。比如日常开发中,常用到的复制的功能,用户新建一个财务凭证后,以后会有类似的凭证,只是金额需要修改,其它内容都相同。此时用户就没有必要重新将凭证的内容一个一个地输入到界面上,只需要执行复制功能,即可生成一张新的一模一样的凭证,然后新的凭证上只修改金额即可,这时就使用原型模式。说明:Java对象原创 2015-04-26 21:43:11 · 937 阅读 · 0 评论 -
设计模式(二)工厂方法模式(FactoryMethod)-创建型
在简单工厂模式中,通过一个工厂类来判断需要调用的具体的实现类,隔离了客户端和具体的实现类之间的关系,从而降低了系统间的耦合性,但是也带来了一个问题,就是如果要创建的对象很多,这个工厂类会非常庞大,仍然不利于后期的代码维护。工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产原创 2015-04-25 12:49:21 · 1148 阅读 · 0 评论 -
设计模式(三)抽象工厂模式(AbstractFactory)-创建型
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些原创 2015-04-25 13:44:06 · 1277 阅读 · 0 评论 -
设计模式(五)创建者模式(Builder)-创建型
创建者模式Builder创建者模式就是将一个复杂对象的构建和它的表示分离,使的同样的构建过程可以创建不同的表示,而在客户端不用知道对象的构建细节。当系统需要创建一组复杂的对象,而且这个复杂的对象组装起来比较麻烦时,就可以使用创建者模式。将抽象工厂模式中的功能类全部抽取出来放到一个类中 工厂类就是只负责对象的创建,不负责对象的组装,通过Director类来进行组装,抽象工厂模式和原创 2015-04-26 22:06:21 · 1044 阅读 · 0 评论 -
设计模式(六)适配器模式(Adapter)-结构型
适配器模式Adapter 有多个人使用一个接口A的方法,不同的人需要不同的方法实现,这时候就需要用到适配器模式 可以先使用一个类B实现该接口,但是其中的方法全不进行任何实现 ,接着谁需要里面的方法,就自己定义一个类C_X然后继承类B,覆盖其中的需要的方法。 适配器分为对象适配器和类适配器:对象适配器实现目标类的接口,依赖适配者类;类适配器继承适配者,并实现目标类的接口。 适配器模式原创 2015-04-27 22:49:44 · 886 阅读 · 0 评论 -
设计模式(七)门面模式(Facade)-结构型
门面模式Facade门面模式:统之间的接口、框架之间的衔接(1)使用接口的形式来开发,不需要知道接口中内部方法的实现;(2)门面模式就是为子系统对外提供的一组接口提供一个统一的界面,使得其他系统对该系统的访问都通过这个统一的界面来完成。(3)当一个负载的系统需要对外提供接口时,就需要将对提供的接口统一封装在外观类里,供外系统使用。门面模式原理图不用门面设计模式的原创 2015-04-30 20:09:04 · 1110 阅读 · 0 评论 -
设计模式(十三)策略模式(Strategy)-行为型
前两天去张家界玩了,一直荒废了学习,持续两天都没在状态,今天好好恢复下。发篇博文吧!策略模式(Strategy)策略模式就是定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以互相替换。策略模式让算法独立于使用它的客户而独立变化。 策略模式就是提供相同的接口,软件开发人员可以根据相应的接口实现不同的策略。然后根据不同的情况选择不同的策略,从而实现客户端代码不用修改,只需要替换不同的原创 2015-05-11 22:12:12 · 1331 阅读 · 1 评论 -
设计模式(十)享元模式(Flyweight)-结构型
享元模式Flyweight组合模式解决了对象时树形结构时的处理方式。当系统需要大量使用重复的对象,而这些对象要消耗很大的资源时就需要使用享元模式来解决。 单例模式,一个类只有一个唯一的对象。也就是说,不管new多少次,只需要创建这个类的一个对象,如果不采用单例模式,没new一次就会创建一个对象,这对于系统需要使用大量重复的对象,而这些对象需要消耗很大的资源时,是很不划算的,这时就需要使用享元模式。原创 2015-05-03 14:57:03 · 1071 阅读 · 0 评论 -
设计模式(二十一)观察者模式(Observer)-行为型
引文:后面几篇的设计模式,都比较不常用,就不详细分析了,只给出个原理图,以后用到了,再补加完整吧。1.观察者模式(Observer)有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维原创 2015-05-22 13:30:06 · 1059 阅读 · 0 评论