GOF
少年啦飞啦
这个作者很懒,什么都没留下…
展开
-
设计模式:访问者模式
访问者模式被应用于解决这一类问题:数据结构中保存着许多元素,对这些元素的处理应该放在什么地方?通常我们最常见的做法就是将这些处理直接放在表示数据结构的类中,当然在很多情况下这算是一种最简单便捷的方式了,例如java集合中也有很多对元素操作的方法是放在集合类中的。但是,当需要经常增加一些处理时,我们就不难发现这种方式存在弊端,即每次增加处理,都需要修改表示数据结构的类,这显然违背了“开闭原则”!...转载 2019-12-06 21:53:53 · 61 阅读 · 0 评论 -
设计模式:中介者模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。(Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to ...转载 2019-12-06 21:26:13 · 68 阅读 · 0 评论 -
设计模式:职责链模式
客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象。这样就实现了请求者和接受者之间的解耦,并且在客户端可以实现动态的组合职责链。使编程更有灵活性。定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。其过程实际上是一个递归调用。要点主要是:有多个对象共同...转载 2019-12-06 21:04:02 · 73 阅读 · 0 评论 -
设计模式:桥接模式
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合。对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计可以使得系统中类的个数更少,且系统扩展更为方便。设计方案...转载 2019-12-06 20:41:51 · 135 阅读 · 0 评论 -
设计模式:命令模式
命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。我们看看关系图:Invoker是调用者(司令员),Receiver是被调用者(即最终执行者--士兵),MyCo...转载 2019-12-06 19:49:22 · 104 阅读 · 0 评论 -
设计模式:解释器模式
定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。类型:行为类模式类图:解释器模式是一个比较少用的模式,本人之前也没有用过这个模式。下面我们就来一起看一下解释器模式。解释器模式的结构抽象解释器:声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作。具体解释任务由它的各...转载 2019-12-04 23:32:02 · 84 阅读 · 0 评论 -
设计模式:享元模式
说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。如果我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,那么内存开销就会很大,所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它的引用指向”adam“,这样就实现了”adam“字符串在内存中的共享。...转载 2019-12-04 23:15:19 · 66 阅读 · 0 评论 -
设计模式:备忘录模式
备忘录模式经常可以遇到,譬如下面这些场景:浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭头回退到上一次的页面,然后也可以点击右箭头重新回到当前页面 数据库备份与还原:一般的数据库都支持备份与还原操作,备份即将当前已有的数据或者记录保留,还原即将已经保留的数据恢复到对应的表中 编辑器撤销与重做:在编辑器上编辑文字,写错时可以按快捷键 Ctrl + z...转载 2019-12-02 22:45:30 · 64 阅读 · 0 评论 -
设计模式:组合模式
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,Composite使得客户对单个对象和复合对象的使用具有一致性。组合模式的优缺点:优点:可以清楚地定义分层次的复杂类型,表示对象的全部层次或者部分层次 ,它让客户端忽略了层次的差异,方便对整个层次经行控制。 客户端可以一致的使用一个组合模式或对单个对象,不必关心处理的是单个对象还是整个组合结构,简化了客户端的代码。 在组...转载 2019-12-02 22:57:31 · 61 阅读 · 0 评论 -
设计模式:状态模式
状态模式,又称状态对象模式(Patternof Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。这里给大家举例子,海贼王中路飞在打多弗朗明哥的时候,首先是普通状态,然后发怒开启二挡状态,被多弗朗明哥嘲笑速度快,但是力量低,于是开启三挡状态,又被嘲笑力量够了,但是速度差远了,路飞被...转载 2019-12-02 22:33:21 · 86 阅读 · 0 评论 -
设计模式:迭代器模式
定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图:如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧:public static void print(Collection coll){ Iterator it = coll.iterator(); whil...转载 2019-12-02 22:22:45 · 59 阅读 · 0 评论 -
设计模式:外观模式
有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。其实本篇要说的这个设计模式就和这很有关系,由于当投资...转载 2019-11-26 22:36:04 · 81 阅读 · 0 评论 -
设计模式:模板方法模式
定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。类图如下:事实上,模版方法是编程中一个经常用到的模式。先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来。经过分析之后,这个任务大体上可分为两部分,排序和打印,打印功能好实现,排序就有点麻烦了。但是A有办法,先把...转载 2019-11-26 22:18:59 · 68 阅读 · 0 评论 -
设计模式:原型模式
原型模式是指用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,是一种创建类模式。类图如下:原型模式主要用于对象的复制,它的核心就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在Java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。...转载 2019-11-26 22:03:36 · 58 阅读 · 0 评论 -
设计模式:观察者模式
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。观察者模式结构图在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题...转载 2019-11-26 21:44:19 · 85 阅读 · 0 评论 -
设计模式:建造者模式
无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体...转载 2019-11-25 21:16:35 · 141 阅读 · 0 评论 -
设计模式:策略模式
策略模式和java语言的多态特性有些像。java的多态特性允许我们面向接口编程,不用关心接口的具体实现。接口所指向的实现类,以及通过接口调用的方法的具体行为可以到运行时才绑定。这么做最大的好处是在尽可能实现代码复用的前提下更好地应对具体实现类的变化。比如我想增加一种接口的实现或者修改原有实现类的某个行为,那我几乎不用修改任何客户端代码。策略模式可以说正是这种思想在设计模式上的运用。它可以使我们更好...转载 2019-11-25 20:52:57 · 68 阅读 · 0 评论 -
设计模式:适配器模式
适配器模式(即Adapter模式,又叫包装器Wrapper)用于改变已有类的接口形式。它可以将某个类的接口转换成客户端期望的另一个接口,主要目的是实现兼容性。让原本因接口不匹配不能一起工作的两个类可以协同工作。比如正常的电压是220v,插座上需要的电压假如是5v,这中间就需要有一个适配器来进行电压转换。从用户的角度是看不到被适配对象的,只是和适配器进行交互。用户调用适配器转换出来的目标接口...转载 2019-11-21 22:18:41 · 53 阅读 · 0 评论 -
设计模式:装饰者模式
定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。要点: 装饰者与被装饰者拥有共同的超类,继承的目的是...转载 2019-11-20 22:50:11 · 46 阅读 · 0 评论 -
设计模式:代理模式
什么是代理模式?代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过...转载 2019-11-20 21:59:25 · 76 阅读 · 0 评论 -
设计模式:工厂模式
工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类...转载 2019-11-19 23:34:47 · 90 阅读 · 0 评论 -
设计模式:单例模式
在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过。我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以这篇文章对单例模式做了详解。一、单例模式定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象...转载 2019-11-19 22:50:39 · 54 阅读 · 0 评论 -
java设计6大原则总结
1.开闭原则(Open Close Principle)定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。这个原则有两个特性,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。面对需求,对程序的改动是通过增加...转载 2019-11-11 22:59:07 · 170 阅读 · 0 评论