JAVA设计模式
文章平均质量分 81
冒菜-码农
且行且珍惜
展开
-
Seata踩坑之与bean工厂模式的冲突
背景:1、我要使用工厂模式实现业务代码2、我需要使用全局事务个人的代码思路1、定义统一业务接口类(IBusService),每种业务类型做不同的实现(BusServiceImpl),实现类指定serviceName给spring的IOC2、定义工厂接口类(IBusFactoryService),其实现通过入参的类型不同获取不同的实现类遇到的问题:1、每个BusServiceImpl的实现方法上添加@GlobalTransactional(rollbackFor = Exception.clas原创 2022-04-14 19:45:58 · 519 阅读 · 0 评论 -
Java多线程 单例模式的DCL问题
public class LazyInitialization{ private static Resource resource; public static Resource getResource(){ if (resource == null) resource = new Resource();//不安全! return resource; }}我们都知道上面的这个代码在单线程中运行是没有问题的,但是在平时的原创 2021-12-30 18:57:35 · 278 阅读 · 0 评论 -
Java 设计模式总结及六大设计原则
设计模式总结总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:创建型模式前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此原创 2021-12-29 17:31:59 · 307 阅读 · 0 评论 -
Java 设计模式——并发型模式整理
目录:双重检查锁定阻碍模式守卫模式线程特定存储反应器模式基于事件的异步模式简单提及线程池模式调度模式Lock 模式消息设计模式读写锁模式双重检查锁定模式双重检查锁定模式(也被称为"双重检查加锁优化",“锁暗示”(Lock hint)[1]) 是一种软件设计模式用来减少并发系统中竞争和同步的开销。双重检查锁定模式首先验证锁定条件(第一次检查),只有通过锁定条件验证才真正的进行加锁逻辑并再次验证条件(第二次检查)。该模式在某些语言在某些硬件平台的实现可能是不安全的。有的时转载 2021-12-29 16:27:35 · 326 阅读 · 0 评论 -
Java 设计模式——解释器模式(行为型设计模式)
概念介绍解释器模式是指给定一个使用规定格式和语法的语言,并且建立一个解释器来解释该语言中的句子。解释器本身就是一种按照规定的语法进行解析的方案,但是总体来说也是一种使用频率相对较低但学习难度较大的设计模式。举例因为解释器模式用到地方不太多,实在想不到举什么样的例子合适,所以就使用一个简单的来实现一个垒加的功能的例子吧。具体过程如下:上下文环境类@Getter@Setterpublic class Context { /** * 输入 */ pri原创 2021-12-29 14:04:57 · 130 阅读 · 0 评论 -
Java 设计模式——中介者模式(行为型设计模式)
简介中介者模式(Mediator Pattern),定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为,属于行为型模式。其主要的目的是用来降低多个对象和类之间的通信复杂性。简单的来说就是提供一个平台。比如生活中我们经常用到的聊天软件QQ、微信群,或者是上网购物的网站淘宝、京东,又或者是房产中介。但是无论是QQ群,还是房产中介,他们都是充当一个中间平台的作用,我们可以直接通过这个平台得到我们想要的信息,避免了原创 2021-12-28 17:40:45 · 480 阅读 · 0 评论 -
Java 设计模式——访问者模式(行为型设计模式)
简介访问者模式(VisitorPattern),顾名思义使用了这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的访问者来完成对已有代码功能的提升,它属于行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。其主要目的是将数据结构与数据操作分离。访问者模式可以说是设计模式中最难以理解的一个模式,因为相比其它模式而言,它过于”绕“了。但是我们可以通过生活中的一些例子来理解它,比如家里来了客人,客人就是访问者,他可原创 2021-12-28 17:23:11 · 195 阅读 · 0 评论 -
Java 设计模式——状态模式(行为型设计模式)实战示例基于spring的状态机
说明:本文只是在个人实战中的示例,主要了解思想,代码可根据自己的具体情况进行调整,不是完整的demo代码。背景说明订单存在下单、支付、运输、完成等此类的状态流转,每一个状态下做不同的业务处理,状态存在变更的情况。期望能够通过配置来实现状态变更时不影响历史代码并且不做变更,仅针对新状态进行业务开发即可。方案说明个人的解决方案是这样的,仅供参考:1、状态具体的流转步骤通过配置文件完成2、每个状态要做的业务逻辑面向接口开发3、使用指令模式来进行控制4、具体指令配置在配置文件中5、指令就是状态c原创 2021-12-28 16:39:36 · 1610 阅读 · 0 评论 -
Java 设计模式——状态模式(行为型设计模式)入门示例
场景描述变色龙是爬行动物,是非常奇特的动物,它有适于树栖生活的种种特征和行为,身体也会随着环境的变化而变化出适应环境的颜色,非常神奇。下面基于状态模式对该变化过程进行描述。代码实现public class C01_InScene { public static void main(String[] args) { Chameleon chameleon = new Chameleon("红色","花丛环境") ; LifeContext lifeContext原创 2021-12-28 16:06:35 · 186 阅读 · 0 评论 -
Java 设计模式——备忘录模式(行为型设计模式)
概念介绍备忘录模式是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。简单的来说就是平时玩的通关游戏,第一次前进了5步,第二次前进时踩到便便了,然后要回到之前的进度。例如下图结构举例我们还是用一个小例子来简单介绍一下备忘录模式,在玩一个步骤游戏时,每走一步时步数都加一,遇到道具可以快速走几步,或者减几步。用备忘录模式的思想来实现这个逻辑,就是如下代码游戏类/** * 游戏 */@Datapublic class Ga原创 2021-12-28 15:42:08 · 266 阅读 · 0 评论 -
Java 设计模式——命令模式(行为型设计模式)
一、了解命令模式1.1 什么是命令模式命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。这种说法比较难以理解,换种说法就是指:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。原创 2021-12-28 15:02:23 · 162 阅读 · 0 评论 -
Java 设计模式——责任链模式(行为型设计模式)
原文地址:https://www.cnblogs.com/xrq730/p/10633761.html责任链模式的定义与特点责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。标准的责任链模式,个人总结下来有如下几个特点:链上的每个对象都有机会处理请求链上的每个对象都持有下一个要处理对象的引用链上的某个对象无法处理当前请求,那么它会把相同的请求传给下一个对象用一张图表示以下使用了责原创 2021-12-28 14:04:19 · 341 阅读 · 0 评论 -
Java 设计模式——迭代子模式(行为型设计模式)深入理解
原文地址:https://www.jianshu.com/p/a0f1ac801e61定义迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation)。聚集和JAVA聚集多个对象聚在一起形成的总体称为聚集(Aggregate),聚集对象是能够包含一组对象的容器对象。聚集依赖于聚集结构的抽象化,具有复杂化和多样性。数组就是最基本的聚集,也是其他JAVA聚集对象的设计基础。Java聚集对象时翻译 2021-12-28 11:37:40 · 488 阅读 · 0 评论 -
Java 设计模式——迭代子模式(行为型设计模式)入门级理解
概念顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。简单例子MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例接口:public interface Collection { public Iterator iterator();原创 2021-12-28 11:26:21 · 142 阅读 · 0 评论 -
Java 设计模式——观察者模式(行为型设计模式)
原文地址:https://www.cnblogs.com/porotin/p/7825656.html1、初步认识观察者模式的定义: 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话: 其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息2、这个模式的结构图3、可以看到,该模式包含四个角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量原创 2021-12-28 10:23:08 · 117 阅读 · 0 评论 -
Java 设计模式——模板方法模式(行为型设计模式)
如果你有一个任务,在一个星期内制造10万悍马车模型,只考虑最基本的实现,不考虑太多别的问题,你会怎么做?既然不考虑扩展性,那就好办了,先按照最一般的经验设计类图,如下图所示非常简单的实现,悍马车有两个型号,H1和H2。按照要求,只需要悍马模型,那就只给悍马模型,先写个抽象类,然后两个不同型号的实现类,通过简单的继承就可以实现业务要求。悍马模型的抽象类代码如下://悍马模型抽象类public abstract class HummerModel{ //模型发动 protected a原创 2021-12-27 18:27:58 · 279 阅读 · 0 评论 -
Java 设计模式——策略模式(行为型设计模式)
策略模式用我个人的理解就是:用一种更灵活更优雅和更健壮的方式替换了if…else…一、问题引入当我们导出一些数据到Excel表格时,有时候需要从不同的维度导出(如:个人维度,时间维度),不同维度所需的处理方式不同,此时的场景很适合用策略模式,下面就以不同维度导出Excel表格为例介绍策略模式。二、策略模式概念和理论知识2.1,策略模式的概念在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 cont原创 2021-12-27 16:54:33 · 915 阅读 · 0 评论 -
Java 设计模式——享元模式(结构型设计模式)
先分享下个人写的实用的设计模式:工厂设计模式入门级理解工厂设计模式进阶(建议详细阅读)工厂设计模式实战经验分享(基于spring动态加载)抽象工厂设计模式单例设计模式原文地址:https://www.cnblogs.com/lixin-link/p/11104658.html在说享元模式之前来先看一道题:public static void main(String[] args) { Integer i1 = new Integer(50); Integer i2 = new原创 2021-12-27 16:19:38 · 1541 阅读 · 0 评论 -
Java 设计模式——外观设计模式(结构型设计模式)又称门面设计模式
举例现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其"分而治之",把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。上图描述的是病人在医院里的体验,图中的方框代表医院。解决这原创 2021-12-27 11:26:00 · 95 阅读 · 0 评论 -
Java 设计模式——代理设计模式(结构型设计模式)涵盖三种代理方式
代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来原创 2021-12-20 15:00:47 · 109 阅读 · 0 评论 -
Java 设计模式——装饰器设计模式(结构型设计模式)
原文地址:https://www.cnblogs.com/yxlaisj/p/10446504.html装饰器模式实际上Java提供的工具包中,IO相关工具就普遍大量使用了装饰器模式,例如充当装饰功能的IO类如BufferedInputStream等,又被称为高级流,通常将基本流作为高级流构造器的参数传入,将其作为高级流的一个关联对象,从而对其功能进行扩展和装饰。装饰器模式(Decorator Pattern),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更灵活。原创 2021-12-20 11:55:51 · 171 阅读 · 0 评论 -
Java 设计模式——适配器设计模式(结构型设计模式)
初步认识适配器模式的定义 将一个类的接口转成客户期望的另外一个接口。适配器模式使得原本由于接口不匹配而不能一起工作的那些类可以一起工作。适配器模式就像旅行插座转换器(图1)、Type-c转VGA转接口(图4)一样。图1图2去过香港迪拜等的同学都知道,那边用的插座跟我们不一样,他们的插座需要如图2第1面所示的插头,而我们常用的插座类似第2面。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。T原创 2021-12-20 11:24:24 · 138 阅读 · 0 评论 -
Java 设计模式——抽象工厂设计模式(创建型设计模式)
原文地址:https://www.cnblogs.com/peter_zhang/p/AbstractFactory.html个人觉得理解了工厂模式,抽象工厂就简单了很多很多,建议先看下工厂模式:https://blog.csdn.net/qq_33333654/category_11536783.html抽象工厂概述抽象工厂模式,对方法工厂模式进行抽象。世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国、英国和美国都有水果园,种植不同的水果,比如苹果、香蕉和梨等。这里将苹果进行原创 2021-12-20 10:37:19 · 277 阅读 · 0 评论 -
Java 设计模式——工厂设计模式(创建型设计模式)实战经验分享(基于spring动态加载)
背景:1、我有一个抽象父类类且定义了泛型 暂且命名为 BaseInfo2、我有一个接口类且定义了泛型 interface 暂且命名为 ITest3、ITest接口存在多个实现类,且泛型均为 同时通过@Service注入到IOC中4、BaseInfo抽象类总有个一个实例方法需要调用ITest接口的test方法5、不同的T对应的ITest接口的实现类不同,且test方法内部逻辑不同需求:在泛型T动态未知的情况下,冬天的使用BaseInfo的实例方法调用到不同的ITest实现类知识点预研:W原创 2021-12-17 16:40:37 · 810 阅读 · 0 评论 -
Java 设计模式——工厂设计模式(创建型设计模式)进阶(建议详细阅读)
原文地址:https://www.cnblogs.com/canglg/p/10456844.html个人还是非常推荐这篇文章的,特别是后半段的一些设计思想,可以结合好到spring框架中使用,后续会出实战篇的文章工厂方法模式《设计模式之禅》中用神话故事女娲造人来比概述工厂方法模式。女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生:第一次烤泥人,感觉应该熟了,往大地上一放,哇,没烤熟!于是一个白人诞生了!(这也是缺乏经验的最好证明。)原创 2021-12-17 15:47:13 · 917 阅读 · 0 评论 -
Java 设计模式——工厂设计模式(创建型设计模式)入门级理解
原文地址:https://blog.csdn.net/qq_39588630/article/details/804783491.工厂方法模式概述: 工厂方法模式(Pattern:Factory Method)属于创建型模式,其意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,将核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。2.工厂方法模式的原创 2021-12-17 15:30:40 · 220 阅读 · 0 评论 -
Java 设计模式——单例设计模式(创建型设计模式)
先上一段代码,思考下为什么这么写public class SingletonDemo { private static SingletonDemo instance; private SingletonDemo(){ System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){ if(instance==null){原创 2021-12-17 11:18:51 · 616 阅读 · 0 评论 -
Java 设计模式——组合模式(结构型设计模式)
原文地址:https://blog.csdn.net/qq_40709468/article/details/81990084组合模式的概念组合模式:组合多个对象形成树形结构以表示有整体-部分关系层次结构,组合模式可以让客户端统一对待单个对象和组合对象由于在使用的时候,比如某个文件夹的方法被调用,那么这个会遍历整个树形结构,寻找也包含这个方法的具体实现(文件)。并且调用执行,其中会使用到递归调用的机制对整个机构进行处理。由于,容器和叶子的功能上的区别,在使用这些对象代码中必须去别的对待容器和叶子,这原创 2021-12-17 10:43:28 · 217 阅读 · 0 评论 -
Java 设计模式——桥连接模式(结构型设计模式)
一、桥连接的用意桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。这句话很短,但是第一次读到这句话的人很可能都会思考良久而不解其意。这句话有三个关键词,也就是抽象化、实现化和脱耦。理解这三个词所代表的概念是理解桥梁模式用意的关键。原创 2021-12-16 14:47:47 · 147 阅读 · 0 评论 -
Java 设计模式——原型模式(创建型设计模式)
一、什么是原型模式所谓原型模式就是克隆模式也可以理解为复制一个对象克隆存在两个方向:浅克隆、深克隆二、浅克隆首先我们要知道对象中除了常量类型(int、boolean、double等)、特殊的字符串类型外还有引用类型(其实就是java类中的另外的一个java对象),其次就是要知道这些类型都是有一个内存地址指向的最后要注意的是被克隆的对象必须Cloneable,Serializable这两个接口那么浅克隆是什么呢?被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原创 2021-12-16 11:43:11 · 369 阅读 · 0 评论 -
Java 设计模式——建造者模式(创建型设计模式)
一、简介1、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示2、主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。3、如何使用:用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)4、解决的问题:(1)、方便用户创建复杂的对象(不需要知道实现过程)(2)、代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)5、注意事项:与工厂模式的区别是:建造者模式更加关原创 2021-12-14 10:54:23 · 820 阅读 · 0 评论