设计模式
文章平均质量分 89
23种设计模式
前端交互仔
编程咨询v: woyaobaofuniubi
展开
-
建造者模式(再也不想写各种setter了)
建造者模式(再也不想写各种setter了)javabean就叫做domain类今天又来给大家吹一下逼。三歪在公司里边也看了不少的系统了,看到结构清晰、代码清晰的系统时会赞叹能写出这种代码的人是真的牛逼。看到乱七八糟的代码又不写注释的时候也会吐槽:“这写的是啥啊”多看别人的代码,总会有不同的发现和体会。最近看别人项目的时候,发现会有这种写法:MessageTask task = MessageTask.builder() .content("关注 Java3y 吧 >> ")转载 2020-12-06 13:45:07 · 303 阅读 · 0 评论 -
责任链模式通用代码干掉if else
责任链模式通用代码干掉if…else今天想来跟大家讨论一下怎么干掉if else。已经工作的人可能深有体会:没有什么是if else搞不掂的,如果有,那就再嵌套一层。大多数人都是做业务开发的,if else是避免不了的,但怎么让if else的逻辑看起来更顺眼,变得更加好看,更加好维护呢?如果之前看过三歪文章的同学可能就会想到「责任链模式」。没错就是 责任链模式当你看到一个Service中有一大堆if else 逻辑的时候,可能你会幻想着要不要重构掉,但是始终下不了手。所以,今天想来分享一个「转载 2020-12-06 12:59:35 · 798 阅读 · 0 评论 -
责任链模式
责任链模式一、什么是责任链模式?在说责任链模式之前,我们先来聊聊「过滤器」。过滤器相信大家都肯定学过了,在最开始学Servlet的时候我们会学到Filter。等学到Struts2的时候,我们会学到Interceptor。等学到SpringMVC的时候,我们会学到HandlerInterceptor。但无论学哪个框架,我们发现是最终其实它还是做Filter这么一件事。说白了就是:把所有的过滤器都放在FilterChain里边,依次执行每个过滤器。在我的GitHub对Filter,Handle转载 2020-12-06 12:42:07 · 110 阅读 · 1 评论 -
模板方法模式
模板方法模式1.1模板方法模式现实例子大家都知道,我每次写原创技术文章,开头总会有“只有光头才能变强”。我当然不可能每次写文章的时候都去复制这句话(因为这样太麻烦了)。我有自己的写作模板,给大家看一下:前言和最后都是固定下来的,至于第一点和第二点就得看是写什么文章,写不同的文章对应的内容也是不一样的。每次我写文章的时候,只要在这个模板上添加我自己想写的东西就好了,就不用每次都复制一遍相同的内容,这样就大大减少我的工作量啦。1.2回到代码世界代码来源于生活,同样地我可以将我写文章的过程用代码来转载 2020-12-06 11:51:48 · 105 阅读 · 0 评论 -
门面模式
门面模式一、门面(外观)模式介绍1.1门面模式现实例子一个电源总开关可以控制所有电器的打开或关闭状态。无论是空调、冰箱、电视、电脑、风扇等等,只要是电器都受这个电闸控制。只要这个电闸将关闭,所有的电器都会受到牵连(一同关闭)。电源总开关(电闸)即为该系统的外观模式设计。看到这里我脑子里有蹦出来个想法,这不就相当于一个工厂模式嘛,只是工厂不生产东西了,当成总开关了。1.2回到代码世界比如,我们家里现在有空调、冰箱、电脑这么几个电器 // 冰箱 public class转载 2020-12-06 11:31:18 · 189 阅读 · 0 评论 -
策略模式
策略模式策略模式几乎我们每天都在用,只是你不知道它叫策略模式而已。就是多个类实现同一个接口重写了不同的方法。但是我这里学到的一个东西就是,当我们客户端调用这些类的时候,我们最好以一个客户端的角色去调用。就是通过对象去调用该类的方法,而不是直接在客户端new一个对象,然后通过new对象调用该方法。虽然可以实现相同的功能,但是不太符合我们的思维逻辑。一、策略模式介绍我一次听到策略模式这个词,是在我初学JDBC的时候。不知道大家有没有用过DBUtils这个组件。当时初学跟着视频学习,方立勋老师首先是让转载 2020-12-06 10:42:12 · 1332 阅读 · 0 评论 -
工厂模式
工厂模式工厂模式我个人认为其实比较难理解的,如果有接触过|听过|见过该模式的同学很可能就会想:我自己new一个对象出来就好了,简单快捷。用得着你这个工厂模式吗?搞一个工厂出来还要写一大堆的代码呢~网上的很多资料都是在阐述着:工厂模式的好处就是解耦。相信大家对解耦这个词也不陌生,那解耦究竟有什么好处呢?本文章试图去解释为什么要用工厂模式,用了工厂模式的好处是什么,以及工厂模式衍生出的三种形式究竟有什么区别~~一、工厂模式概述在《设计模式之禅》这本书中分了两章节讲工厂模式:工厂方法模式(转载 2020-12-06 10:11:50 · 175 阅读 · 0 评论 -
单例模式
单例模式一、单例模式概述单例模式定义很简单:一个类中能创建一个实例,所以称之为单例!那我们什么时候会用到单例模式呢??那我们想想既然一个类中只能创建一个实例了,那么可以说这是跟类的状态与对象无关的了。频繁创建对象、管理对象是一件耗费资源的事,我们只需要创建一个对象来用就足够了!学过Java Web的同学可能就知道:Servlet是单例的Struts2是多例的SpringMVC是单例的那既然多例是频繁创建对象、需要管理对象的,那Struts2为什么要多例呢??主要由于设计层面上转载 2020-12-05 16:15:41 · 95 阅读 · 0 评论 -
包装模式也叫装饰模式
包装模式也叫装饰模式在看到FilterInputStream和FilterOutputStream时看到了之前常听见的装饰模式(对IO一定了解的同学可能都会知道那么一句话:在IO用得最多的就是装饰模式了)!其实无论是代理模式还是装饰模式。本质上我认为就是对原有对象增强的方式~这句话就很精髓了,你品你细品一、对象增强的常用方式很多时候我们可能对Java提供给我们的对象不满意,不能满足我们的功能。此时我们就想对Java原对象进行增强,能够实现我们想要的功能就好~一般来说,实现对象增强有三种方式:转载 2020-12-05 13:33:54 · 133 阅读 · 0 评论 -
代理模式
代理模式代理模式是一种非常好理解的一种设计模式,生活中处处都有代理:王宝强作为一个明星,不可能什么事都由他自己干(约电视剧、排期之类的),于是他请了经纪人去医院挂号很麻烦怎么办?找黄牛帮我们挂号王者荣耀技术水平不够,想要上分怎么办?请游戏代练写点不正经的代码被警察捉走了怎么办?请律师帮我们打官司无论是经纪人、黄牛、游戏代练、律师他们都是得帮我们干活。但是他们不能一手包办的,仅仅在“我”的基础上处理一些杂碎的东西(我们不愿意干、或者干不了的东西)。这句话就说出来了代理模式的核心了,重要的东转载 2020-12-05 11:41:47 · 129 阅读 · 0 评论 -
设计模式的学习
https://refactoringguru.cn/原创 2020-11-30 17:47:01 · 80 阅读 · 0 评论 -
对聚合的理解
聚合就是指弱包含关系,has a。例如手机和耳机就是聚合关系,耳机可以脱离手机单独存在。原创 2020-11-24 08:41:10 · 442 阅读 · 0 评论 -
适配器模式
相当于把目标接口和适配器接口通过继承和实现的形式进行了组合。原创 2020-11-24 21:07:51 · 70 阅读 · 0 评论 -
适配器模式
在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个原创 2020-11-23 14:42:11 · 121 阅读 · 0 评论 -
外观模式
https://zhuanlan.zhihu.com/p/307631259原创 2020-11-23 13:36:43 · 80 阅读 · 0 评论 -
建造者模式
https://zhuanlan.zhihu.com/p/307629612原创 2020-11-23 13:35:26 · 73 阅读 · 0 评论 -
原型模式
在软件系统中,当创建一个类的实例过程过于昂贵或复杂,并且我们需要创建多个这样类的实例时,如果我们通过new来创建类实例,这就会增加创建类的复杂度和创建过程与客户代码复杂的耦合度。如果采用工厂模式来创建这样的实例对象的话,随着产品类的不断增加,导致子类的数量不断增多,也导致了相应工厂类的增加,维护的代码维度增加了,因为有产品和工厂两个维度了,反而增加了系统复杂程度,所以在这里使用工厂模式来封装类创建过程并不合适。下面的话是重点:由于每个类实例都是相同的(类型相同),但是每个实例的状态参数会有不同,如果.原创 2020-11-23 12:45:10 · 74 阅读 · 0 评论 -
模板方法模式
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。...原创 2020-11-23 12:43:50 · 59 阅读 · 0 评论 -
Java 传值和传引用的区别
传值(传的是副本,相当于我又创建了一个相同的值)// 基本数据类型public class ParamChangeValue { public static void main(String[] args) { int s = 1; System.out.println("args = [" + s + "]"); change(s); System.out.p转载 2020-11-23 12:44:15 · 151 阅读 · 0 评论 -
简单工厂模式、工厂方法模式和抽象工厂模式有何区别?
// 创建Reader对象的工厂public class ReaderFactory { public static Reader getReader() throws FileNotFoundException { File file = new File("aa.txt"); FileReader fileReader = new FileReader(file); BufferedReader reader = new BufferedRe..原创 2020-11-22 16:17:19 · 751 阅读 · 0 评论 -
工厂方法模式
和简单工厂模式相比多写了接口(避免修改工厂类)原创 2020-11-22 15:21:39 · 55 阅读 · 0 评论 -
策略模式和装饰模式的区别
装饰模式在共有的方法下面先调用super方法,然后再调用自己写的新的方法实现一层套一层,最后实现装饰的功能。而策略模式子类方法都实现了重写功能,方法里面的内容完全不同。原创 2020-11-22 13:59:45 · 1045 阅读 · 0 评论 -
接口可以作为参数嘛
public class Test implements Love { private Love love; private void test(Test test){ test.love(); love.love(); //通过接口调用接口里面的方法我觉得没什么意思,通过生成的实现类调用接口重写的方法有意义 System.out.println("如果没有它你还爱我嘛"); } public static void ma原创 2020-11-22 12:31:02 · 893 阅读 · 0 评论 -
装饰模式
扩展体现在继承、修改体现在子类中,而不是具体的抽象类,这充分体现了依赖倒置原则,这是自己理解的装饰者模式。原创 2020-11-22 12:30:24 · 68 阅读 · 0 评论 -
里氏代换原则
由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展原创 2020-11-22 10:54:49 · 125 阅读 · 0 评论 -
依赖倒装原则
依赖倒装的理解:针对接口编程,不要对实现编程原创 2020-11-22 10:36:38 · 227 阅读 · 1 评论 -
策略模式和工厂模式的区别
如果在适合用策略模式的情况下用简单工厂模式,如果新增加策略就要修改工厂类,而这个可能会导致其他错误和比较繁琐,而如果使用了策略模式,只要将新增加的策略当做参数传递到Context类中即可。意思不就是策略模式是工厂模式的升级版嘛参考文章:https://www.jianshu.com/p/04b4097e2b36...原创 2020-11-22 10:18:15 · 197 阅读 · 0 评论 -
开放封闭原则
单一职责这个层面仅仅是进行了分类,开放封闭原则在封装的前提下又进行了抽象化原创 2020-11-22 09:51:39 · 86 阅读 · 0 评论 -
单一职责原则
原创 2020-11-21 23:06:01 · 87 阅读 · 1 评论 -
策略模式
import java.util.Scanner;public class Market { public static void main(String[] args) { System.out.println("请输入商品的单价"); Scanner scanner = new Scanner(System.in); String price = scanner.nextLine(); System.out.println(.原创 2020-11-21 22:22:46 · 69 阅读 · 0 评论 -
uml类图的标记的含义
一般关联关系,就是一个类在另一个类里面作为形参,或者就是new 对象的形式存在,依赖其实就是变量存在到一个类里面。聚合和组合也是属于关联关系。其实这里也是可以解释成聚合关系的(是可以进行分类的)桌子和桌子腿就属于组合关系了,分离了这个东西就坏了参考文章:https://www.cnblogs.com/millen/archive/2009/04/27/1444618.html...原创 2020-11-21 15:49:37 · 756 阅读 · 0 评论 -
简单工厂模式(举例)
通过写一个计算机的案例起初我们是这样写的import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;import java.util.Scanner;public class Computer { public static void main(String[] args) { System.out.println("请输入数字A:"); Scanner scannerA = new Scanner(原创 2020-11-21 14:29:02 · 658 阅读 · 0 评论 -
springboot+layui前后端分离酒店管理系统
原创 2020-09-24 23:24:20 · 1949 阅读 · 1 评论