![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
IMHB
造轮子真好玩,即使目前还是低级别的轮子
展开
-
设计模式-访问者模式
先来一段脑袋痛的定义。在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。那么这句话是什么意思喃?举个例子,家里的宠物,猫狗各一只,那么你可以选择自己喂养,也可以让亲人喂养。那么在代码上...原创 2018-06-20 23:37:15 · 94 阅读 · 0 评论 -
设计模式-享元模式
享元模式,之前我也没听说过,但是却经常使用到。先说一下我对享元模式的理解:一个系统中若存在大量相同或相似的对象,则只共享一份就可以了,没有必要为每份相同的东西还都单独实例化出一个对象,这样节约了内存,也提高了性能。例如经常使用到的string,string有一个常量池,存储了大量的字符串,你可以取出来直接使用,不必new;还有integer也有缓存,-128-127(默认)。那么首先看一段代码St...原创 2018-06-18 15:38:56 · 200 阅读 · 0 评论 -
认识ArrayBlockingQueue
最近想学习JUC的内容,就先攻克一下队列吧,平时自己用queue的场景较少,倒是了解过有很多东西是基于queue的,比如消息中间件啊。还是从常用的一些方法入手。1.构造函数:ArrayBlockingQueue (int capacity)public ArrayBlockingQueue(int capacity) { this(capacity, false);} p...原创 2018-06-18 19:51:57 · 163 阅读 · 0 评论 -
设计模式-外观模式
学习了外观模式,发现外观模式非常贴近面向对象的原则-封装原则,对于内部的实现隐藏,只对外提供一个接口能够被访问。感觉外观模式无处不在,我认为3层架构的模式,也体现了外观模式。现在举个生活中的栗子,程序员离不开的就是电脑,那么电脑开机通常是直接按一个外部的按钮,那么这时候电脑就开机了,而这个过程当中,电脑做了许多事情,比如主机的启动、cpu启动、操作系统的启动等。那么直接贴出代码吧其实这个就有点像c...原创 2018-06-11 09:14:47 · 128 阅读 · 0 评论 -
设计模式-状态模式
状态模式的定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。这句话简单明了,为了更加清晰,我们举个例子。电灯对应的行为有增加亮度和降低亮度,有两种状态,打开和关闭,但是当电灯关闭的时候你并不能调整亮度。那么先来看一下在不使用状态模式的代码。public class LightState { public static final int POWER_ON=1; ...原创 2018-06-19 21:30:18 · 152 阅读 · 0 评论 -
设计模式-适配器模式
定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。举个栗子,想象一个莫名其妙的场景,现在有一个群鸭子,鸡看见了,它非要凑进去玩,可是鸭子发现它是鸡以后,就要溜了,那么鸡该怎么办喃?很简单嘛,给鸡穿个鸭子的外套,别人看见后以为是鸭子呢,比如你看见别的鸭子飞的很高,鸡飞的很低,是因为鸡只是在跑,其他鸭子吃东西的动作也和...原创 2018-06-27 15:38:33 · 98 阅读 · 0 评论 -
设计模式-命令模式
先来一波命令模式的定义:在软件设计中,我们经常会遇到某些对象发送请求,然后某些对象接受请求后执行,但发送请求的对象可能并不知道接受请求的对象是谁,执行的是什么动作。此时可通过 命令模式 来实现,让发送者和接受者完全的松耦合,这样可大大增强程序的灵活性。接着看一下UML类图。举个例子来详细说明一下,以head First中的命令模式为例。假设现在有遥控器,要控制大厅的灯,大厅的音响,房间的空调。你当...原创 2018-06-27 21:30:15 · 174 阅读 · 0 评论 -
设计模式-委派模式(算是吧)
看了mybatis源码之后,发现了大量的委派模式,并且最近在学习spring的源码的时候也发现了大量的委派模式,那么就大致看一下。还是结合场景来分析,我们程序员都有个上级,比如我们码农得听项目经理的话,项目经理得听老板的话,当老板布置一个任务给了项目经理,他不可能还要写代码三,所以就让我们码农写代码了,但是在老板看来,其实是项目经理完成的。这样就是简单的委派模式了。/** * 所有类的基类...原创 2018-07-21 19:04:03 · 264 阅读 · 0 评论 -
设计模式-责任链模式
责任链模式的定义:责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。责任链模式的重点在“链”上,有一条链去处理相似的请求在链中决定由谁去处理这个请求,并返回相应的结果。就是设计模式的核心思想—可拓展性高,解耦合。考虑几种场景:1.if else if else if 。。。...原创 2018-07-23 09:04:32 · 105 阅读 · 0 评论 -
设计模式-备忘录模式
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态(其实不一定是在对象之外,可以是类自主备份和恢复),这样以后就可以将该对象恢复到原先保存的状态。其实就可以看成是你写论文,前面几个月都去玩了,然后最后几天想起来了,就开始写论文,啪啪啪,写了10000字了,这时候nice了,电脑莫名其妙死机了(其实就是不想让你毕业),那咋办,写了10000字啊!!还好电脑有备份,...原创 2018-06-29 15:10:13 · 133 阅读 · 0 评论 -
设计模式-代理模式
代理模式是AOP的主要实现。何为代理模式喃?举个例子,皇上洗澡,只需要进浴池洗澡就能够洗完澡了,至于洗澡前的脱衣,洗澡后的穿衣都是其他人完成的,这就可以看成皇上真实的动作只有洗澡,其他的都是被隐藏起来的被代理的动作。步入正题了,代理模式分了两种,一种是JDK动态代理,一种cglib代理(不考虑静态代理)。public interface IUserService { void shower()...原创 2018-06-17 19:24:31 · 123 阅读 · 0 评论 -
设计模式-中介者模式
先来讲个故事吧。现在买房子,很少能够直接和卖家接触,都是跟中介打交道,中介负责传话。那么放入计算机里面,卖家,买家都是人嘛,那就是有共同的父类的一些对象,打交道就是说话嘛,那就是面对面说话,这样就会有较强的耦合性,假设卖家今天没来,那你岂不是无话可说?这就是耦合性!!!为了解耦,那么就采用中介这样的形式,买家只用告诉中介,买家知道中介一定会告诉卖家,就行了。这样买家,卖家就解耦了。直接贴出代码。(...原创 2018-06-13 22:31:58 · 108 阅读 · 0 评论 -
设计模式-策略模式
策略模式,是我阅读到HeadFirst的第一个模式,其意义很大,在一定程度上让我对于面向对象的思维更加开阔,对于解耦的理解更加深刻了。能让我写出更具有拓展性的代码比如一个场景,你想要去旅行,那么现在有3种方式可以选择,主要是根据你的荷包的大小来决定出行方式。直接上代码。现在完美地解决了出行问题,可是假设你通过努力,获得了更多的财富,你想要选择更加舒适的出行,例如:游轮,那么这个时候你就只能在cho...原创 2018-06-07 14:41:58 · 95 阅读 · 0 评论 -
设计模式-桥接模式
其实刚接触桥接模式的时候,认为桥接模式和策略模式非常相似。下面是他们的uml图可以看出非常的相似,很难说出差别。那么就举个栗子,现在画画,有3种图形,圆形、长方形、三角形。分别有3种颜色,黑白灰。那么如果采用策略模式的话,那么strategy可能就会有3*3=9个类,然后在和context进行关联,主要体现在封装了算法,达到直接调用其中一个类就能够得到相应的结果。如果是采用桥接模式的话,那么就只需...原创 2018-06-14 20:12:45 · 146 阅读 · 0 评论 -
设计模式-构建者模式
讲一下何为构建者模式?我的理解就是在创造类的时候,让创造过程变得简单易懂,可读性更高。这就需要和原始的构造器进行对比了。贴一下最终代码。上面是一种是通过构建者的方式创建的student,下面是传统的构造器方式创建student对象,那么对比一下,可以发现构建者的优点是可读性高。缺点是代码过长。下面贴出关键性代码Buidler这个类。...原创 2018-06-08 09:27:03 · 288 阅读 · 0 评论 -
设计模式-单例模式
自己简单地总结的有关单例模式。单例模式主要有3个版本。(以下单例没有考虑反射获取,以及通过流的方式创建,如果想要避免反射的话,可以考虑设置一个开关;流的话,还没仔细了解,以后补充)1.饿汉模式。可以说是非常的完美,除了急加载以外没有其他缺点。2.懒汉模式,解决了急加载的问题。版本有许多。(1)V1.0:直接锁住,再判断创建与否。这样会导致性能的急速下降。(2)V2.0:先判断存在与否,再锁住,再判...原创 2018-05-06 20:51:49 · 136 阅读 · 0 评论 -
设计模式-模板方法模式
模板方法模式相当简单,这里引用之前的策略模式,策略模式是采用面向对象的封装原则进行处理的,那么模板方法模式也是根据面向对象的思想来的,利用的是继承的概念。还是沿用策略模式的场景,你去旅游,可以选择坐车,轮船,飞机等。在策略模式当中,可以通过封装算法达到效果。那么在模板方法中如何实现喃?模式比较简单,我就直接贴出代码。public abstract class AbstractWay {//这个是出...原创 2018-06-15 23:40:00 · 94 阅读 · 0 评论 -
设计模式-原型模式
原型模式其实就是为了快速地创造相同的对象。举个栗子,工厂生产手机,那么这个时候,手机除去id其他部分基本相同,但是手机有很多属性要填写呢,那么我们可以选择生产时,就一个个new,然后通过一系列的set()方法放入属性,如此往复。但是这样做很复杂,因为手机其实都是一样的,那么我们就可以选择“克隆”的方式来创建对象。这样做有几个好处:(1)如果创造对象的过程比较复杂,并且对象变化不大,那么我们可以通过...原创 2018-06-09 21:22:16 · 123 阅读 · 0 评论 -
设计模式-组合模式
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。这是百度上面的意思,我自己理解的话,就有点类似与文件系统,比如a文件目录下有b文件夹、t1.txt、i2.img,b文件夹下又有t2.txt。为了用户的使用性,那么可以将文件夹和这些非文件夹看成是一类东西,比如你要在一个文件夹中添加,那么直接添加该东西即可,并不需要去关注他到底是文件...原创 2018-06-17 16:55:56 · 133 阅读 · 0 评论 -
reactor模型—生动形象
网上有很多讲解reactor模型的,我还是看了比较久才稍微领悟一点意思,那么我就举个例子讲讲自己的理解。我们首先先结合NIO、多路复用的知识,做一个比喻。大前提:餐馆的服务员现在假设只有一个(还需要兼职厨师),那么当一个客人来了之后,服务员会把菜单给客人,然后就走开去迎接其他客人,当有客人点好餐的时候会把菜单告诉服务员,服务员就会去做事,热按后服务员再把菜给客人,就完成了完整的一次流程。...原创 2019-04-16 23:04:44 · 258 阅读 · 2 评论