设计模式
文章平均质量分 50
yubin1285570923
这个作者很懒,什么都没留下…
展开
-
设计模式:Composite--组合模式-树形结构
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图:使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等。代码实现:文件夹和文件例子,根节点加入文件和文件夹,文件夹里面再加文件等,然后递归显示名字/** * 节点抽象 */public interface IFile { //获取显示文件夹或文件的父类 ...原创 2019-05-22 09:06:13 · 558 阅读 · 1 评论 -
设计模式:Flyweight--享元模式-池化
享元模式:享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象,FlyWeight是超类。一提到共享池,我们很容易联想到Java里面的JDBC连接池,想想每...原创 2019-05-22 09:06:37 · 454 阅读 · 1 评论 -
设计模式:Chain of Responsibility--职责链模式
职责链模式:也叫做职责链模式或者职责连锁模式,是行为模式之一,该模式构造了一系列分别担当不同职责的类对来来共同完成一个任务,这些类的对象之间像链条一样紧密相关联所以被称作职责链模式 有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情...原创 2019-06-16 10:25:05 · 121 阅读 · 0 评论 -
设计模式:Bridge桥接模式跟Strategy策略模式区别
Bridge桥接模式跟Strategy策略模式区别:从结构图中可以看到,策略的结构是包容在桥接结构中的,桥接中必然存在着策略模式在桥接模式 桥Abstraction和另外接口Implementor都可以分别演化不同的子类等变化策略模式中并不考虑Context的变化,只有算法的可替代性。实际上所有模式可以只分为类模式和对象模式两种,类模式是用继承而对象模式是用委托Bridge模...原创 2019-06-16 10:24:42 · 493 阅读 · 0 评论 -
设计模式:Command--命令模式
命令模式命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。我们看看关系图:Invoker是调用者(司令员),Receiver是被调用者(士兵),MyC...原创 2019-06-16 10:25:12 · 341 阅读 · 1 评论 -
设计模式:Memento--备忘录模式
备忘录模式:主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作。做个图来分析一下:Original类是原始类,里面有需要保存的属性value及创建一个备忘录类,用来保存value值。...原创 2019-06-16 10:26:02 · 200 阅读 · 1 评论 -
设计模式:State--状态模式
状态模式核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。看图:State类是个状态类,Context类可以实现切换,我们来看看代码:实例代码一:public cla...原创 2019-06-16 10:26:07 · 197 阅读 · 0 评论 -
设计模式:Visitor--访问者模式
访问者模式访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。简单关系图...原创 2019-06-16 10:26:13 · 334 阅读 · 1 评论 -
设计模式:Mediator--中介模式
中介模式中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改。如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。先看看图:User类统一接口,User1和User2分别是不同的对象,二者之间有关联,如果不采用...原创 2019-06-17 17:20:00 · 196 阅读 · 0 评论 -
设计模式:Interpreter--解释器模式
解释器模式他是一种特殊的设计模式,他建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法,简单的讲,解释器模式interpreter是一种简单的语法解释器框架应用场景:当一个介绍语言需要执行并且可将该语言中的句子表示为一个抽象语法树,可以使用解释器模式,而存在以下情况时候效果更好1 该语法对于复杂的文法,文法的类层次变得庞大而无法管理,此时语法分析程序生成器这个月的工...原创 2019-06-17 17:20:05 · 564 阅读 · 1 评论 -
设计模式:Iterator--迭代器模式
迭代器模式顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图:MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例,iterat...原创 2019-06-16 10:24:59 · 411 阅读 · 2 评论 -
设计模式:Observer--观察者模式
观察者模式 是行为模式之一,作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象的状态。observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。 属于类和类之间的关系,不涉及到继承,观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅...原创 2019-06-16 10:24:50 · 258 阅读 · 1 评论 -
设计模式:Template Method--模板方法模式
模板方法模式把具有特定步骤算法中的某些必要处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系图:就是在AbstractCalculator类中定义一个主方法calculate,calcu...原创 2019-06-16 10:23:29 · 141 阅读 · 0 评论 -
设计模式:Strategy--策略模式
策略模式感觉类似于桥接模式,只是具体区别还需要再研究策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下Strategy:策略(算法)抽象ConcreteStrategy: 各种策略的具体实现Co...原创 2019-06-16 10:23:09 · 146 阅读 · 0 评论 -
设计模式:Proxy--代理四种具体实现
代码在github上面可以参考定义:动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象。一、代理的原理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象. 任何对原始对象的调用都要通过代理. 代理对象决定是否以及何时将方法调用转到原始对象上二、实现代理静态代理,jdk动态代理,cglib动态代理,通过编译期提供的A...原创 2019-05-13 23:46:21 · 1408 阅读 · 1 评论 -
设计模式:Adapter--适配器模式
适配器模式:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。1 类适配器:核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口是Targetable,通过Adapter类,将Source的功能扩展到2 对象适配器:基本思路和类的适配器模式相...原创 2019-05-22 09:06:21 · 208 阅读 · 0 评论 -
设计模式:Simple Method--简单工厂模式
简单工厂模式:简单工厂模式属于创建型模式,又叫做静态工厂方法模式,通过专门定义一个类来负责创建其他类的实例。被创建的实例通常都具有相同的父类关系图:工厂角色creator就是SendFactory接口,抽象角色productSender,具体产品concrete product是MailSend和SmsSend工厂角色creator简单工厂模式的核心,它负责实现创建所有实例内部逻...原创 2019-05-15 16:24:57 · 359 阅读 · 0 评论 -
设计模式:Factory Method--工厂方法模式
工厂方法模式属于创建型模式:又被称为多态工厂模式。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实例创建工作推迟到子类当中。核心工厂类不在负责产品创建,这样核心类称为一个抽象工厂角色,仅仅负责具体工厂子类必须实现的接口。这样进一步抽象化的好处是使得工厂方法模式可以使系统不在修改具体工厂角色的情况下引进新的产品关系图;抽象工厂角色creator这里是Provider,具体工厂conc...原创 2019-05-15 16:55:50 · 146 阅读 · 0 评论 -
设计模式:Abstract Method--抽象工厂模式
抽象工厂模式属于创建型模式,是所有形态的工厂模式中最为抽象和最其一般性的,抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型情况下,能够创建多个产品族的产品对象。抽象工厂角色creator 包含多个产品结构的声明,任何工厂类都必须实现这个接口或者抽象类具体工厂角色concrete creator ...原创 2019-05-15 21:28:47 · 236 阅读 · 0 评论 -
设计模式:Decorator--装饰器模式
装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下:装饰器模式的应用场景:1、需要扩展一个类的功能。2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)缺点:产生过多相似的对象,不易排错!实例一:Source类是被装饰类,Deco...原创 2019-05-15 22:18:41 · 273 阅读 · 1 评论 -
设计模式:设计模式分类及六大原则
一、分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型...原创 2019-05-15 22:30:06 · 279 阅读 · 1 评论 -
设计模式:Builder--建造者模式
建造者模式对象的创建:builder模式是为对象的创建而设计的模式创建的是一个复合对象,被创建的对象为一个具有复合属性的复合对象。关注对象创建的各个部分创建过程,不同工厂(这里指的是builder生成器)。对产品属性有不同的创建方法。设计师:Director 里面含有建造者Builder的引用,调用builder的方法执行事件 Builder接口 :构建者接口,工程师,创建对...原创 2019-05-15 23:41:38 · 174 阅读 · 0 评论 -
设计模式:Propotype--原型模式
原型模式原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中,复制对象是通过clone()实现的,先创建一个原型类Person.javapublic class Person implements Cloneable{ privat...原创 2019-05-16 21:49:48 · 308 阅读 · 1 评论 -
设计模式:Facate--外观模式
外观模式外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的启动过程为例)代码如下:class CPU { public void startUp () { System...原创 2019-05-16 21:49:55 · 374 阅读 · 1 评论 -
设计模式:Bridge--桥接模式
桥接模式:把事务和具体行为分开,通过bridge桥接调用,实现对接口对应实现的的调用桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提...原创 2019-05-22 09:06:05 · 654 阅读 · 2 评论 -
设计模式:Singleton--单例模式
饿汉式: 1 直接实例化(简洁直观) 2 枚举(最简洁) 3 静态代码块(适合复杂实例化) 饱汉式 1 线程不安全(适用于单线程) 2 线程安全 3 静态内部类形式(适用于多线程)一、饿汉式1public class Singleton1 { public static final Singleton1 INSTANCE = new Sing...原创 2019-04-21 23:32:09 · 112 阅读 · 0 评论