![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式专题
打着吊瓶写代码
你现在的气质,源于你走过的路,见过的人,读过的书。
展开
-
第一篇:写在开头的经验总结
写在设计模式系列文章开头:最近听到有不少同事在讨论设计模式这个话题,无外乎是围绕几个方面,到底什么是设计模式?何时该用设计模式?设计模式有什么用?尤其是在一些刚毕业的童鞋面前,设计模式更是被蒙上了一层神秘的面纱。于是,我准备花几个礼拜的业余时间,将设计模式全部总结一遍,我尽量用通俗易懂的语言和代码来书写我个人对设计模式的一些想法和经验,个人经验有限,如有错误的地方还请各位谅解。首先,我原创 2017-03-02 11:05:05 · 531 阅读 · 0 评论 -
第十六篇:备忘录模式
说在开头:其实我个人并不认为这是什么设计模式...因为完全没有什么价值嘛,不过既然多本书上对其有介绍,那我还是写一下吧!备忘录模式是用来实现 备份,还原 的一种代码组织结构; 什么时候需要备份还原呢?非常常见的是游戏中的保存进度, 打BOSS前需要先将当前进度保存一下,等到一不小心挂了,还可以马上恢复到打BOSS前...不然得江湖再见一切重头开始,那该多蛋疼???原创 2017-03-26 10:30:10 · 386 阅读 · 0 评论 -
第十四篇:原型模式
原型模式就是用来生成同样的对象的!比如你的简历,你创建好一份简历之后,通过打印机不断的打印就能创建出多份相同的简历出来,这些简历内容都是一模一样的的,用程序来表示的话,就是虽然对象不同(内存地址不同),但属性都是一模一样...我们看看如果不用原型模式的话会是什么样子:原创 2017-03-26 09:46:17 · 301 阅读 · 0 评论 -
第十三篇:建造者模式
见名之意,建造者就是用来建造对象的嘛!不过...等等,我们先前不是有工厂模式吗?我记得工厂模式也是用来创建对象的阿? 别着急,听我说!我们得将这两种模式区分一下,工厂模式是用来创建一个对象,它只初始化对象必须具备的属性,而建造者模式呢,是在创建完对象的基础上,再对对象进行一系列操作从而拿到更加完善的对象! 就比如造房子,工厂模式就像是提供一个地基,而通过建造者模式,我们可以在有地基的基础上,再进行砌砖,打梁,盖瓦...等操作最终得到一个房子!原创 2017-03-26 09:33:22 · 310 阅读 · 0 评论 -
第十二篇:组合模式
我们先了解一下组合模式吧!组合模式可以以树状形式来描述对象与对象的一组孩子之间的层次关系,运用组合模式,可以让个体以及个体下的组合(一组对象) 都使用同样的编程模型!也就是说,如果用了组合模式,无论是枝干节点还是叶子节点,我们都可用在上面调用一样的方法,我们不用去关心它到底是枝干还是叶子;原创 2017-03-17 21:23:30 · 248 阅读 · 0 评论 -
第十一篇:迭代器模式
迭代器模式其实还是非常好理解的,因为我们无时无刻都在使用着迭代器模式,当我们用foreach语法遍历List集合,Set集合的,Map集合的时候,无形中就用到了java实现的迭代器,比如这样:原创 2017-03-17 21:22:50 · 294 阅读 · 0 评论 -
第八篇:单例模式
关于单例模式我并不想做过多解释,网络上有一大堆关于它的定义,简而言之,单例就是指单个对象,整个程序的运行生命周期内某个对象只会生成一次!这么做有什么意义呢?很简单,你的电脑开机,有多个回收站对象会有什么后果?你删掉一个文件它该被放入哪个回收站? 有多个注册表会怎样? 程序中有多个数据库连接池会怎样? 这些问题留给你去思考吧!正因为某些对象的特殊性,整个程序生命周期内只能出现一个它的实例, 又或者,某些对象的创建非常复杂非常消耗资源,且它是不会随着程序的运行而有所改变的,那么我们也期望只生产一次这个对象,原创 2017-03-12 19:04:28 · 364 阅读 · 0 评论 -
第六篇:工厂模式
说到工厂模式,根据实现方式和运用场景的不同,我们一般将它归纳为三种工厂,普通工厂模式,静态工厂模式以及工厂方法模式;今天我们就分别说说这几种模式的实现以及它们之间的区别;写代码之前我们先来谈谈工厂模式的作用?很简单,就像我们现实中的工厂一样,现在你需要一部手机,如果让你自己去制作,那么你需要知道一部手机的整个制作流程,你有兴趣去关心手机怎么制作出来的吗?拜托,你只是想要一部手机而已!但如果有这么一个对象(工厂) , 你只要告诉它,我要一部什么牌子的手机,它就能给你制作出来,你完全不需要去理会整个制作流程原创 2017-03-09 16:56:53 · 375 阅读 · 0 评论 -
第七篇:外观模式
在介绍外观模式前,我们先来看一个小例子!你现在要让一辆汽车跑起来, 好,要让车跑,我们假设有好几个步骤,每个步骤都有不同的系统参与(下面都是我瞎扯的,真实性完全属扯淡,实际上汽车可不是这样运作的啊!!!);1:得先调用电路管理系统,从电源处开始通电;2:调用油路管理系统,从邮箱处开始供油;3:调用汽车动力系统,开始让动力气缸工作产生动能;4:调用离合管理系统,让离合器片开始工作,带动转动轴开始转动,四轮开始转圈,跑起来了!;好,我们现在将上面的瞎扯淡的内容转换为我们的代码;原创 2017-03-12 19:03:47 · 274 阅读 · 0 评论 -
第十九篇:代理模式
代理模式大家应该都非常熟悉了吧,我们的spring中到处使用了代理,比如我们用声明式事物,写一个事物注解,当我们在调用目标对象的某个方法前,spring会先为我们开启一个事物,方法调用结束,spring会为我们提交事物...看起来我们好像是直接使用了目标对象调用了目标方法,而实际上却是使用的spring为我们创建的代理对象...关于这个话题这里不做展开,后续我会写数篇关于spring整个框架原理的解析博文 , 现在,我们举一个简单的例子,来展示下代理模式是怎么工作的!原创 2017-03-28 21:53:31 · 441 阅读 · 0 评论 -
第十八篇:责任链模式
责任链就是链条式处理请求,当我们的请求到来,会经过一条对象链,这条链上有多个节点对象,它们都会对请求的数据进行解析处理, 这样的话, 后期如果要增加新的功能,只需要在链条中增加一个节点就可以了!就像我们servlet中Filter一样,每一个Filter都拦截处理请求,且处理完毕后交给下一个Filter进行处理,这就是典型的责任链模式;今天废话不多说,直接写责任链模式的代码;现在需要你为公司网站设计一个内容过滤系统,你应该怎么来做?简单的说,该功能就是将用户上传的文本内容进行验证与过滤! 在动手写代码原创 2017-03-26 11:20:15 · 438 阅读 · 0 评论 -
第十五篇:状态模式
什么是状态呢?这个非常好理解,就比如我们经常听到的一句广告词 “不在状态怎么办?脉动回来!!!” , 那么这就是状态的体现啦,这里的状态指的是你的精神,你的精神非常好,可能会赶紧看书工作,稍微差点,可能得眯眼休息下,差到完全处于懵逼状态,那你可能得选择好好休息睡个觉什么的了; 所以你的精神状态决定了你接下来的行为,用代码来表示的话,状态就是一个变量,而变量的变化,直接影响程序的走向...今天我们就来举一个关于状态的例子, 举个通俗易懂的吧, 拿天气来举例 !原创 2017-03-26 10:09:33 · 396 阅读 · 0 评论 -
第五篇:适配器模式
这个模式挺简单的,大家一看就懂。首先,适配器模式有两个角色,适配器,适配对象; 我们先说,生活中有哪些与适配器模式类似的地方?听过最多的例子,电源插座!你有台电子设备,插头是三孔的,结果电源排插只提供了两孔的;这个时候你怎么办?你得买一个转接插座,这个插座有头是两孔的,它可以连接上原来的插座,而它也提供一个三孔的入口让你可以插入,这个时候就完美解决了你的问题!然我们来画一个丑陋原创 2017-03-09 15:29:29 · 335 阅读 · 0 评论 -
第四篇:观察者模式
今天我们来谈谈观察者模式,这个模式其实无论是在编程还是在生活中都是随处可见的,就比如说,你在烧一壶水,某个时间段后,当水壶“叮”的一声,你知道水开了,这个时候,你可能会去拔掉电源插头,可能会去拿起水壶泡一壶茶;当然这一切到底做不做都取决于你,水壶已经履行了它的义务,“将水烧开再叮的一声通知你...”又比如说,你在优酷订阅了某个有趣的节目,当节目有更新时,你会收到通知,当然,还有其它订阅了该频道原创 2017-03-09 10:37:38 · 459 阅读 · 0 评论 -
第二篇:策略模式
场景:你的公司最近要做一个飞机模型展览项目,该项目可以向客户展示各种各样的飞机,项目第一期可以确定的是这些飞机都有不同的外观,都可以发出声波,都可以飞行;好了,现在我们就知道这些,让我们开干吧!(你该不会去纠结模型展览的飞机为什么会发声波还会飞行吧?...)首先,用OO思维,我们可以先总结出一个父类:原创 2017-03-02 11:10:48 · 484 阅读 · 0 评论 -
第三篇:命令模式
这一次的场景,我们用游戏来举例 ;你是一名游戏开发者,现在呢,需要你来为某个游戏中的角色实现行走的功能,行走的指令从用户的键盘获取 W,S,A,D分别对应角色的上下左右移动,好吧;为了模拟上面的需求,我们基本可以确定要有些什么对象和方法了;首先,我们创建需要的游戏角色;/** 游戏角色*/public class Role { public void turnOn(){ S原创 2017-03-05 09:30:07 · 368 阅读 · 0 评论 -
第九篇:装饰者模式
今天我们来谈谈装饰者模式! 说起这个模式,相信大家都有过接触,java的IO体系总用过吧,IO体系中各种流都可以见到装饰者的影子,比如BufferedReader和Reader,通过向BufferedReader的构造函数中传入一个Reader,这个Reader就具备了缓冲的能力!再举个例子,比如你是一个光溜溜的人, 给你套一件麻布衣服,你就成了一个平民,拥有了外出打酱油的能力(不穿衣服你敢出去???) , 再在你麻布衣服上套一层布甲,你成了一个低级士兵,拥有了战斗的能力! 如果再在布甲上面套一层蝙蝠战原创 2017-03-12 19:05:04 · 333 阅读 · 0 评论 -
第十篇:模板方法模式
通过画图,我们发现,其中某些步骤是完全固定的,那我们就可以思考,是不是可以有一个类,然后定义一个总的方法,这个方法就像是一个大的算法(把炒米粉看成是一个算法吧)骨架,或者说它就是一个模板,在这个方法中,它顺序调用不同的方法(步骤) , 先调用刷锅(),再放油()...接下来要解决放粉条的问题,怎么办,它自己不知道要放什么粉条,OK,抽象嘛,让子类来决定要放什么粉条咯! 再接下来要放醋...到底放不放呢? 放醋的过程是固定的,我们要复用这段代码,那怎么办呢? 那具体放醋过程还是我们父类自己觉得,而到底要不要原创 2017-03-12 19:05:48 · 269 阅读 · 0 评论 -
第十七篇:桥接模式
此模式主要用来解决复杂的类关系问题,通过抽象出多个类,从多个维度来描述解决问题,从而让混乱的类关系结构变得清晰;我们先来下个定义:桥接模式,用来将抽象部分与它的实现部分相分离,使它们可以独立的变化!这是什么意思呢?别急,往下看!原创 2017-03-26 11:06:02 · 377 阅读 · 0 评论