<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[JavaTeachers的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/JavaTeachers</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; JavaTeachers]]></copyright><item><title><![CDATA[Spring事务源码详解]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/123127031</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/123127031</guid><author>JavaTeachers</author><pubDate>Fri, 25 Feb 2022 14:17:01 +0800</pubDate><description><![CDATA[Spring事务三大接口介绍

PlatformTransactionManager： （平台）事务管理器
TransactionDefinition：事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则
TransactionStatus： 事务运行状态

PlatformTransactionManager接口介绍
Spring并不直接管理事务，而是提供了多种事务管理器，他们将事务管理的职责委托给Hibernate或者JTA等持 久化机制所提供的相关平台框架的事务来实现。 Spring事务管理器的]]></description><category></category></item><item><title><![CDATA[Netty精讲（二）编解码器、粘包拆包、心跳检测、零拷贝]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/122555200</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/122555200</guid><author>JavaTeachers</author><pubDate>Tue, 18 Jan 2022 11:25:48 +0800</pubDate><description><![CDATA[Netty编解码
Netty涉及到编解码的组件有Channel、ChannelHandler、ChannelPipe等，先大概了解下这几个组件的作用。
ChannelHandler
ChannelHandler充当了处理入站和出站数据的应用程序逻辑容器。例如，实现ChannelInboundHandler接口（或 ChannelInboundHandlerAdapter），你就可以接收入站事件和数据，这些数据随后会被你的应用程序的业务逻辑处理。当你要给连接的客户端发送响应时，也可以从ChannelInbou]]></description><category></category></item><item><title><![CDATA[Netty精讲（一）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/122539217</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/122539217</guid><author>JavaTeachers</author><pubDate>Mon, 17 Jan 2022 15:07:12 +0800</pubDate><description><![CDATA[Netty初探
NIO 的类库和 API 繁杂， 使用麻烦： 需要熟练掌握Selector、 ServerSocketChannel、 SocketChannel、 ByteBuffer等。
开发工作量和难度都非常大： 例如客户端面临断连重连、 网络闪断、心跳处理、半包读写、 网络拥塞 和异常流的处理等等。
Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装，解决了上述问题。且Netty拥有高性能、 吞吐 量更高，延迟更低，减少资源消耗，最小化不必要的内存复制等优点。
Netty 现在都在]]></description><category></category></item><item><title><![CDATA[BIO，NIO，AIO精讲]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/122219777</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/122219777</guid><author>JavaTeachers</author><pubDate>Wed, 29 Dec 2021 17:18:11 +0800</pubDate><description><![CDATA[IO模型精讲
IO模型就是说用什么样的通道进行数据的发送和接收，Java共支持3种网络编程IO模式：BIO，NIO，AIO
BIO(Blocking IO)
同步阻塞模型，一个客户端连接对应一个处理线程
缺点：

IO代码里read操作是阻塞操作，如果连接不做数据读写操作会导致线程阻塞，浪费资源
如果线程很多，会导致服务器线程太多，压力太大。

应用场景：
BIO 方式适用于连接数目比较小且固定的架构， 这种方式对服务器资源要求比较高， 但程序简单易理解。

BIO代码示例
服务端示例
public cla]]></description><category></category></item><item><title><![CDATA[java23种设计模式（二十三） -- 解释器模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121603457</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121603457</guid><author>JavaTeachers</author><pubDate>Mon, 29 Nov 2021 10:14:01 +0800</pubDate><description><![CDATA[解释器模式
简介
解释器模式是类的行为模式。给定一个语言之后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。
解释器模式是指给定一个使用规定格式和语法的语言，并且建立一个解释器来解释该语言中的句子。解释器本身就是一种按照规定的语法进行解析的方案，但是总体来说也是一种使用频率相对较低但学习难度较大的设计模式。
结构

抽象表达式(Expression)角色：声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方]]></description><category></category></item><item><title><![CDATA[java23种设计模式（二十二） -- 访问者模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121554194</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121554194</guid><author>JavaTeachers</author><pubDate>Fri, 26 Nov 2021 10:31:00 +0800</pubDate><description><![CDATA[访问者模式
简介
访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构则可以保持不变。
意图：主要将数据结构与数据操作分离。
主要解决：稳定的数据结构和易变的操作耦合问题。
何时使用：需要对一个对象结构中的对象进行很多不同的并且不相关的操作，而需要避免让这些操作"污染"这些对象的类，使用访问者模式将这些封装到类中。
角色
Visitor（抽象访问者）：抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作，从这个操作的名称]]></description><category></category></item><item><title><![CDATA[java23种设计模式（二十一） -- 模板模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121537082</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121537082</guid><author>JavaTeachers</author><pubDate>Thu, 25 Nov 2021 14:44:20 +0800</pubDate><description><![CDATA[模板模式
简介
模板方法模式是类的行为模式。准备一个抽象类，将部分逻辑以具体方法以及具体构造函数的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
结构
模板方法模式是所有模式中最为常见的几个模式之一，是基于继承的代码复用的基本技术。
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架，另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法]]></description><category></category></item><item><title><![CDATA[java23种设计模式（二十） -- 策略模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121532567</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121532567</guid><author>JavaTeachers</author><pubDate>Thu, 25 Nov 2021 11:02:11 +0800</pubDate><description><![CDATA[策略模式
简介
策略模式是对算法的包装，是把使用算法的责任和算法本身分割开来，委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面，作为一个抽象策略类的子类。用一句话来说，就是：“准备一组算法，并将每一个算法封装起来，使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。

角色


环境(Context)角色：持有一个Strategy的引用。


抽象策略(Strategy)角色：这是一个抽象角色，通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。


]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十九） -- 状态模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121531617</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121531617</guid><author>JavaTeachers</author><pubDate>Thu, 25 Nov 2021 10:26:00 +0800</pubDate><description><![CDATA[状态模式
简介
状态模式，又称状态对象模式（Pattern of Objects for States），状态模式是对象的行为模式。
状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。
角色结构
状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式的示意性类图如下所示：

状态模式所涉及到的角色有：


环境(Context)角色，也称上下文：定]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十八） -- 观察者模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121518086</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121518086</guid><author>JavaTeachers</author><pubDate>Wed, 24 Nov 2021 16:12:38 +0800</pubDate><description><![CDATA[观察者模式
简介
定义
在对象之间定义了一对多的依赖，这样一来，当一个对象改变状态，依赖它的对象会收到通知并自动更新。
大白话
其实就是发布订阅模式，发布者发布信息，订阅者获取信息，订阅了就能收到信息，没订阅就收不到信息。
角色

抽象被观察者角色：也就是一个抽象主题，它把所有对观察者对象的引用保存在一个集合中，每个主题都可以有任意数量的观察者。抽象主题提供一个接口，可以增加和删除观察者角色。一般用一个抽象类和接口来实现。
抽象观察者角色：为所有的具体观察者定义一个接口，在得到主题通知时更新自己。
具体被观]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十七） -- 备忘录模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121510986</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121510986</guid><author>JavaTeachers</author><pubDate>Wed, 24 Nov 2021 11:09:23 +0800</pubDate><description><![CDATA[备忘录模式
简介
备忘录模式是以可以恢复或者说回滚，配置、版本、悔棋为核心功能的设计模式，而这种设计模式属于行为模式。在功能实现上是以不破坏原对象为基础增加备忘录操作类，记录原对象的行为从而实现备忘录模式。
这个设计在我们平常的生活或者开发中也是比较常见的，比如：后悔药、孟婆汤(一下回滚到0)，IDEA编辑和撤销、小霸王游戏机存档。当然还有我们非常常见的Photoshop
角色构成
原发器类（Originator）：创建一个备忘录对象，使用备忘录存储它的内部状态。
负责人类（CareTaker）：负责保存好]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十六） -- 中介者模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121508887</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121508887</guid><author>JavaTeachers</author><pubDate>Wed, 24 Nov 2021 10:05:14 +0800</pubDate><description><![CDATA[中介者模式
简介
中介者模式要解决的就是复杂功能应用之间的重复调用，在这中间添加一层中介者包装服务，对外提供简单、通用、易扩展的服务能力。
这样的设计模式几乎在我们日常生活和实际业务开发中都会见到，例如；飞机????降落有小姐姐在塔台喊话、无论哪个方向来的候车都从站台上下、公司的系统中有一个中台专门为你包装所有接口和提供统一的服务等等，这些都运用了中介者模式。除此之外，你用到的一些中间件，他们包装了底层多种数据库的差异化，提供非常简单的方式进行使用。
例如下面这个结构，如果每个元素两两之间要产生联系，关系就]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十五） -- 迭代器模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121488790</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121488790</guid><author>JavaTeachers</author><pubDate>Tue, 23 Nov 2021 11:16:32 +0800</pubDate><description><![CDATA[迭代器模式
介绍
迭代器模式，常见的就是我们日常使用的iterator遍历。虽然这个设计模式在我们的实际业务开发中的场景并不多，但却几乎每天都要使用jdk为我们提供的list集合遍历。另外增强的for循环虽然是循环输出数据，但是他不是迭代器模式。迭代器模式的特点是实现Iterable接口，通过next的方式获取集合元素，同时具备对元素的删除等操作。而增强的for循环是不可以的。
这种设计模式的优点是可以让我们以相同的方式，遍历不同的数据结构元素，这些数据结构包括；数组、链表、树等，而用户在使用遍历的时候并不]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十四） -- 命令模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/121486231</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/121486231</guid><author>JavaTeachers</author><pubDate>Tue, 23 Nov 2021 09:59:47 +0800</pubDate><description><![CDATA[命令模式
介绍
命令模式在我们通常的互联网开发中相对来说用的比较少，但这样的模式在我们的日常中却经常使用到，那就是Ctrl+C、Ctrl+V。当然如果你开发过一些桌面应用，也会感受到这样设计模式的应用场景。从这样的模式感受上，可以想到这是把逻辑实现与操作请求进行分离，降低耦合方便扩展。
命令模式是行为模式中的一种，以数据驱动的方式将命令对象，可以使用构造函数的方式传递给调用者。调用者再提供相应的实现为命令执行提供操作方法。可能会感觉这部分有一些饶，可以通过对代码的实现进行理解，在通过实操来熟练。
在这个设计]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十三） -- 责任链模式（行为设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/120975189</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/120975189</guid><author>JavaTeachers</author><pubDate>Tue, 26 Oct 2021 16:54:11 +0800</pubDate><description><![CDATA[责任链模式
简介
责任链模式是一种对象的行为模式。在责任链模式里，很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求，这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
举例
击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置，由一人击鼓，击鼓的地方与传花的地方是分开的，以示公正。开始击鼓时，花束就开始依次传递，鼓声一落，如果花束在某人手中，则该人就得饮酒。
比如]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十二） -- 代理模式（结构型设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/120970746</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/120970746</guid><author>JavaTeachers</author><pubDate>Tue, 26 Oct 2021 14:20:03 +0800</pubDate><description><![CDATA[代理模式
简介
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.
这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法
举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十一） -- 享元模式（结构型设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/120952437</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/120952437</guid><author>JavaTeachers</author><pubDate>Mon, 25 Oct 2021 15:20:19 +0800</pubDate><description><![CDATA[享元模式
介绍
享元模式，主要在于共享通用对象，减少内存的使用，提升系统的访问效率。而这部分共享对象通常比较耗费内存或者需要查询大量接口或者使用数据库资源，因此统一抽离作为共享对象使用。
另外享元模式可以分为在服务端和客户端，一般互联网H5和Web场景下大部分数据都需要服务端进行处理，比如数据库连接池的使用、多线程线程池的使用，除了这些功能外，还有些需要服务端进行包装后的处理下发给客户端，因为服务端需要做享元处理。但在一些游戏场景下，很多都是客户端需要进行渲染地图效果，比如；树木、花草、鱼虫，通过设置不同元]]></description><category></category></item><item><title><![CDATA[java23种设计模式（十） -- 外观模式（结构型设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/120948610</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/120948610</guid><author>JavaTeachers</author><pubDate>Mon, 25 Oct 2021 11:18:37 +0800</pubDate><description><![CDATA[外观模式
概念介绍
外观模式（Facade）,他隐藏了系统的复杂性，并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口，这个接口使得子系统更容易被访问或者使用。
角色及使用场景

简单来说，该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中，设计到3个角色。

门面角色：外观模式的核心。它被客户角色调用，它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。
子系统角色:实现了子系统的功能。它对客户角色和]]></description><category></category></item><item><title><![CDATA[java23种设计模式（九） -- 装饰器模式（结构型设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/120906516</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/120906516</guid><author>JavaTeachers</author><pubDate>Fri, 22 Oct 2021 15:26:08 +0800</pubDate><description><![CDATA[装饰器模式
简介
Decorator装饰器，顾名思义，就是动态地给一个对象添加一些额外的职责，就好比为房子进行装修一样。因此，装饰器模式具有如下的特征：
    它必须具有一个装饰的对象。

    它必须拥有与被装饰对象相同的接口。
    
    它可以给被装饰对象添加额外的功能。

用一句话总结就是：保持接口，增强性能。
装饰器通过包装一个装饰对象来扩展其功能，而又不改变其接口，这实际上是基于对象的适配器模式的一种变种。它与对象的适配器模式的异同点如下。
   相同点：都拥有一个目标对象。

   ]]></description><category></category></item><item><title><![CDATA[java23种设计模式（八） -- 组合模式（结构型设计模式）]]></title><link>https://blog.youkuaiyun.com/JavaTeachers/article/details/120900748</link><guid>https://blog.youkuaiyun.com/JavaTeachers/article/details/120900748</guid><author>JavaTeachers</author><pubDate>Fri, 22 Oct 2021 10:41:25 +0800</pubDate><description><![CDATA[组合模式
简介
用面向对象的方式来处理树形结构
组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。
在组合模式中引入了抽象构件类Component，它是所有容器类和叶子类的公共父类。
角色
	Component抽象构件
		可以是接口或抽象类
		为叶子构件和容器构件对象声明接口
	Leaf叶子构件
		叶子节点没有子节点
	Composite容器构件
		容器节点包含子节点，其子节点可以是叶子节点，也可以是容器节点。

组合模式，就是在一个对象中包含其他对象，这些被包含的对象可能是终点对象（]]></description><category></category></item></channel></rss>