java设计模式
java所有设计模式,为什么?是什么?怎么用?
^胖胖猫^
不是在写代码,就是在写代码的路上!
展开
-
19.设计模式-备忘录模式
所谓备忘录模式,就是把我们保存的东西放到一个地方存起来,然后我们要恢复的时候从那个地方去取这个东西。类似我们操作里面的ctrl+z撤销键,我们这边做一个简单的demo.如果有很多状态什么的,那也可以在此基础上进行新增原始业务类/** * 业务类 */public class Original { private Integer state; public Original(){ this.state=0; } /** * 创建一个备忘录原创 2020-11-01 22:11:01 · 76 阅读 · 0 评论 -
18.设计模式-责任链模式
所谓责任链模式,就是我有一个任务,那么这个任务需要不同的处理器进行处理,一个个的传下去,其中每一个处理器被称为一个节点。负责具体的东西。比如拦截器对请求的处理,不同的拦截器需要处理的内容不一样,就相当于责任不一样。比如生活中常见的请假,就需要人事,经理,老板审批,每个人审批的内容不一样。下面做一个简单的demo.责任抽象类/** * 责任链抽象类 */public abstract class Handler { public Handler nextHandler; /**原创 2020-11-01 20:45:33 · 89 阅读 · 0 评论 -
17.设计模式-命令模式
命令模式,按我的理解就是把请求的命令,和执行命令的业务分开来的一种设计模式。所以要包含命令对象,也要包含执行对象,以及添加命令的对象。代码实现如下命令抽象类/** * 命令对象,提供执行的方法 */public abstract class Cammand { public Receiver receiver; public Cammand(Receiver receiver) { this.receiver = receiver; } publ原创 2020-11-01 17:54:13 · 94 阅读 · 0 评论 -
16.设计模式-中介者模式
中介者模式,其实是一种把关联关系放在一起统一处理的一个模式。这跟房屋买卖里面的中介者不太一样,那个是属于代理模式。什么意思呢,举个我们平时可能在开发过程当中遇到的写文档例子。A把文档写了发给B,B又把文档补上发给C,A又觉得不对,等C写完又发给A。这样文档在大家手中传来传去的,非常不方便。那我们是不是可以弄一个平台,把文档放到指定的地方,然后写完了,传入到平台处理,然后我们把文档从指定的地方下载下来就行了。大概就是下面两幅图的转换创建一个同事抽象类/** * 同事抽象类,含有一个写文档的方法,引入原创 2020-11-01 16:59:00 · 85 阅读 · 0 评论 -
15.设计模式-观察者模式
观察者模式,即需要有观察者主题Subject,还有观察者Observe,以及通知者Notify.我们可以动态的添加观察者,以及批量通知观察者。这样可以达到观察和主题之间的解耦。在springboot源码里面可以明显看到观察者模式的运用了,有兴趣可以了解一下。观察者模式代码如下。抽象主题/** * 抽象主题 */public abstract class Subject { /** * 添加观察者 * @param observe */ public a原创 2020-11-01 00:04:25 · 90 阅读 · 0 评论 -
14.设计模式-模板模式
模板模式,顾明思议就是要有一个模板。但是呢,我有了模板之后,有些地方我可能还需要自定义。我们将这种场景衍生出来的模式定义为设计模式。就像我们炒菜都有一些固定的模板,比如要先洗菜,再点火,再倒油,再炒。但是不同的菜有相同的步骤,也有不同的步骤。具体到代码层面,如下所示。定义一个炒菜的模板前面洗菜,生火都一样,后面的步骤不一样public abstract class CookTemplate { /** *炒菜的方法 */ public void cook() {原创 2020-10-31 21:41:50 · 156 阅读 · 0 评论 -
13.设计模式-策略模式
策略模式,我们可以理解为方案模式。就是我们平时做事情有很多的方案。比如到公司去上班,可以打车,可以骑车,可以走路。你指定那种方案,那么就按照那种方案来执行。包括我们马上双十一了,有很多优惠方案。比如打折的,比如满减优惠的。在java里面,通过抽象类的设计,巧妙的利用到了这一点。下面看代码定义一个策略抽象类/** * 策略类,里面包含获取价格的抽象方法 */public abstract class Strategy { public abstract void getPrice();}原创 2020-10-31 17:59:12 · 71 阅读 · 0 评论 -
12.设计模式-享元模式
<font color=#999AAA 共享模式,实际上在java里面主要是做缓存。比如我们常见的常量缓存池这种。因为对于java来说,对象是比较占用空间的。而我们实际上很多时候是不需要这么多对象,那么怎么办呢,就用到了享元模式。就是把公共的一些东西缓存起来。下面看代码怎么实现,写的比较简单。实体类public class Share { private String name; private String id; public String getName() {原创 2020-10-31 15:11:26 · 127 阅读 · 0 评论 -
11.设计模式-组合模式
组合模式就是将对象组成类似与树状结构的一种模式。统一叶子对象和组合对象的模式。我们常见的比如文件夹,下面有文件夹以及具体的文件,各种嵌套。包括业务开发过程当中使用到的动态菜单,商品的分类归属等等场景。下面来看下具体的代码。定义一个File抽象类这里为什么要在父类抛出异常呢,因为叶子节点其实没有子类,所以就不存在添加,删除的操作。具体情况可以根据业务场景进行设计。package com.example.design.composite.demo2;/** * 定义文件的抽象类,里面包含了查看文件内原创 2020-10-31 13:53:59 · 74 阅读 · 0 评论 -
10.设计模式-外观模式
外观模式相对比较简单,我们自己平时也会用到。就是我们的业务或者流程非常的复杂,但是对于我们客户端来说,并不关心。那么我们就把这种复杂的流程整理出来,提供一个简单的访问接口给客户端进行调用。那么这种方式就是外观模式。从架构来说,我们用到的springboot就是相当于一种外观模式的思想。就是把繁杂的spring配置简单化。创建Facade对象public class Facade { public void method() { method1(); method2原创 2020-10-30 23:48:18 · 132 阅读 · 0 评论 -
9.设计模式-桥接模式
所谓桥接模式即为搭建中间关系的一种模式。举个网上比较流行的例子。如果我们要画一种画,需要大中小三种笔,红,蓝,黄,绿,紫五种颜色。那如果我是准备彩笔的话,我得准备多少支笔呢?我得准备3*5=15种吧。也就是大的需要准备五种颜色的笔,中的也要准备五种颜色的笔,小的也要准备五种颜色的笔。但如果我用毛笔+墨砚呢?那只需要3支笔,5种颜色的墨砚,我大的画完一种颜色,洗了,又涂抹另外一种颜色画。这样就只需要3+5=8个材料。造成第一种需要15中材料的原因是什么呢?就是因为笔本身和颜色本身耦合在一起了。这个在代码中就说原创 2020-10-26 23:58:43 · 632 阅读 · 0 评论 -
8.设计模式-代理模式
代理模式,顾名思义就是让别人帮你做一些事情。因为有的事情你自己可能做起来不是很方便,比如买房子要办理各种各样的手续。那说明客户本身和代理本身都具有一些操作目标方法,只是代理类更好操作一点。下面看代码实现静态代理定义一个房子接口,具有买房的功能/** * 房子有买的功能 */public interface House { void buyHouse();}定义一个客户类,实现房子public class Customer implements House { @Overr原创 2020-10-22 22:31:50 · 108 阅读 · 0 评论 -
7.设计模式-装饰模式
装饰模式即包装模式,是一种结构设计模式。从字面上理解就是包装一个对象。比如人要穿衣服,房子要装修。对于客户端来说,它是一个显示的包装,就是我知道你包装了什么。比如房子要装修。那么我们的房子可以抽象为一个接口,里面有一个装修的功能。它的某一个实现类属于空白。什么都不做。跟这个空白类平级需要一个装修抽象类,装修抽象类下有一些装修要素,比如装修墙,装修沙发,装修桌子。而我们只需要在这些装修抽象类中维护一个房子多态形式。代码如下/** * 房子接口,用有装修的功能 */public interface Ho原创 2020-10-13 23:23:55 · 72 阅读 · 0 评论 -
6.设计模式-适配器模式
适配器模式,顾明思议就是适配。就像我们的手机充电接口不合适的时候,在前面搞个转接口,转接口再插到电源上就可以充电了。又比如我们的内存卡,电脑是没办法直接读取的,这个时候我们需要用到一个读卡器的东西,那么把内存卡插到读卡器上,读卡器插到电脑上就可以了。这个转接头,读卡器就是我们说的适配。在程序里面适配呢主要是分为3种适配,类适配,对象适配,接口适配类适配假如我们这里要通过target的接口调用source的方法,那么直接利用target实现类是不行的,除非在实现类维护source的对象。那么这种情况下,原创 2020-10-13 00:02:53 · 70 阅读 · 0 评论 -
5.设计模式-原型模式
原型模式,就是我有一个实例,但是我又不能直接用这个实例,那么就要基于这个实例拷贝一份,这就被称为原型模式。在java当中的Object方法里面提供了一个clone的方法可以使用,必须实现Cloneable接口,但是只能是浅拷贝,就是说如果说该实例下面有其它非基本类型的引用对象,并没有把这个引用对象重新拷贝一份。如果要进行深拷贝,就需要用到其它方法。直接上才艺创建一个User对象@Datapublic class User implements Cloneable,Serializable {原创 2020-10-11 00:27:21 · 75 阅读 · 0 评论 -
4.设计模式-建造者模式
前段时间一直忙于考证,没有整理,打开博客感觉又好像过了很久的样子,哎,松懈时间过得真快,今天整理一波建造者模式。从字面意思建造者模式更倾向于建造。例如计算机包含鼠标,键盘,耳机,音响,打印机等等硬件设备。这是一个相对比较复杂的对象。而我们要创建的是计算机这个整体,如果采用工厂模式就没那么专业。因为工厂模式更多的是提供单个组件的创建。所以这里用建造者模式会比较好一点。准备一个计算机实体类/** * 计算机对象 */public class Computer { //鼠标对象,模拟原创 2020-10-09 22:54:27 · 88 阅读 · 0 评论 -
3.设计模式-工厂模式
文章目录前言一、简单工厂模式二、一般工厂模式三、抽象工厂模式前言这两天看了不少关于工厂模式的文章,但是对于理解该模式深度并没有什么突破,可能个人能力原因吧。所以还是依照网上一些比较常规的方式整理一下。问题:为什么需要用工厂模式?1.为了解耦把对象的创建和使用过程分开,因为有的对象创建可能并不一定只是一个简单的new 就完了,还涉及到其它处理。但是使用者是不需要关心的,所以采用工厂设计模式能达到这样的一个效果。就像你只关心吃饭,而不需要关心这个饭菜怎么做出来的,那你就不需要自己做饭,直接去外面餐馆吃原创 2020-09-06 00:26:13 · 276 阅读 · 0 评论 -
2.设计模式-单例模式
简介单例模式是平时接触可能最多的一种设计模式,同时相对来说也算是比较简单的设计模式。但是依然有一些细节的地方需要注意。首先什么是单例?按字面意思那就是只允许有一个实例对象。因为对于java类而言,我们可以通过new的方式创建很多的java对象,对象是需要占用我们的内存空间,而我们在实际的业务当中并不需要这么多对象,只需要一个对象就可以满足我们的业务需求了。比如web开发中,我们的controller类,正常情况下只需要存在一个就可以了。还有一些工具类,只需要一个实例就可以处理上传文件,加载配置文件等功能原创 2020-09-02 22:47:50 · 146 阅读 · 0 评论 -
1.设计模式-总览
前言以前总觉得写博客挺浪费时间的,而且总想憋个大招一次性就把文章写好,到最后都是不了了之。很多东西因为缺乏记录,往往都是看了学,学了忘,忘了又看。你说你熟悉吧,你又不能系统的一下总结出来,你说你不熟悉吧,好像又能讲出点门道出来,查查资料基本好像也ok。我希望我的每一篇博客都是在阅读大量资料,自身做过验证的情况下,以最好的形式呈现给大家。后期我也会结合对应的新感受,新看法做相应的更正,如果有不对的地方也请各位大神批评指正。废话不多说,开始进入正题,聊一聊设计模式。1.为什么要有设计模式(待补充)2.设计原创 2020-09-02 21:11:21 · 79 阅读 · 0 评论