<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Horace's Blog]]></title><description><![CDATA[博客：https://www.zhaohaihao.com]]></description><link>https://blog.youkuaiyun.com/Dh_Chao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Dh_Chao]]></copyright><item><title><![CDATA[Java设计模式之行为型-状态模式 (State)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104644584</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104644584</guid><author>Dh_Chao</author><pubDate>Tue, 03 Mar 2020 23:27:23 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

当一个对象的内在状态改变时允许改变其行为。

状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。可以将状态的判断逻辑转移到表示不同状态的一系列类当中，从而简化复杂的判断逻辑。
三个角色
状态模式主要有以下三个角色：

环境类Context：也叫做上下文，维护一个当前状态，并将与状态相关的操作委托给...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-访问者模式 (Visitor)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104637865</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104637865</guid><author>Dh_Chao</author><pubDate>Tue, 03 Mar 2020 18:03:15 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改，接受这个操作的数据结构可以保持不变。

访问者模式适用于数据结构相对稳定的系统，它把数据结构和作用于数据结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。
访问者模式的核心就是根据不同的访问者对相同的数据产生不同的操作行为。
五个角色
访问者...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-责任链模式 (Chain of Responsibility)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104634339</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104634339</guid><author>Dh_Chao</author><pubDate>Tue, 03 Mar 2020 15:54:04 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

使多个对象都有机会去处理请求。从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链，并沿着这条链传递该请求，直到有一个对象处理它为止。

责任链模式也叫做职责链模式。
三个角色
责任链模式主要有以下三个角色：

抽象处理者Handler：定义一个处理请求的接口，内部包含一个后继处理者的引用。
具体处理者C...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-中介者模式 (Mediator)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104630623</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104630623</guid><author>Dh_Chao</author><pubDate>Tue, 03 Mar 2020 13:23:24 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。

四个角色
中介者模式主要有以下四个角色：

抽象中介者Mediator：提供了注册同事对象与转发同事对象信息的抽象方法。
具体中介者Concrete Mediator：管理同事对象类，协调...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-命令模式 (Command)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104615565</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104615565</guid><author>Dh_Chao</author><pubDate>Mon, 02 Mar 2020 17:23:04 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

将一个请求封装为一个对象，从而使你可用不同的请求对客户进行参数化。

四个角色
命令模式主要有以下四个角色：

抽象命令类Command：声明执行操作的接口。
具体命令类Concrete Command：是抽象命令类的具体实现类，持有接受者对象，同时通过调用接收者的功能来完成命令要执行的操作。
接收者Receiver...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-备忘录模式 (Memento)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104608892</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104608892</guid><author>Dh_Chao</author><pubDate>Mon, 02 Mar 2020 12:10:28 +0800</pubDate><description><![CDATA[行为型-备忘录模式 (Memento)
????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

在不破坏封装性的前提下，捕获一个对象的内部状态，并且在该对象之外保存这个状态，从而可以在将来合适的时候把这个对象还原到之前保存的状态。

备忘录模式也叫快照模式。
三个角色
备忘录模式主要的角色有以下三个：

发起人Originator：负责创建一个备忘录，记录当前时刻发起人的...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-观察者模式 (Observer)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104603478</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104603478</guid><author>Dh_Chao</author><pubDate>Mon, 02 Mar 2020 00:09:11 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

定义了对象之间的一对多依赖，这样一来，当一个对象改变状态时，它的所有依赖者(观察者)都会收到通知并且自动更新。

观察者模式提供了一种对象设计，让观察者和被观察者(主题)之间松耦合。
四个角色
观察者模式的主要角色有以下四个：

抽象主题角色Subject：将所欲对观察者对象的引用保存在一个集合里，每个主题都可以有任...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-解释器模式 (Interpreter)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104598114</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104598114</guid><author>Dh_Chao</author><pubDate>Sun, 01 Mar 2020 19:24:11 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

给定一个语言，定义它的文法的一种表示，并定义一个解释器，这个解释器使用该表示来解释语言中的句子。

定义中提到的文法和句子的概念同编译原理中的描述相同，“文法”指的语言的语法规则，而“句子”是指语言集中的元素。
四个角色
解释器模式主要有四个角色：

环境角色Context：包含解释器之外的一些全局信息。
抽象表达式...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-策略模式 (Strategy)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104560993</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104560993</guid><author>Dh_Chao</author><pubDate>Fri, 28 Feb 2020 17:59:28 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

定义了算法家族，分别封装起来，让它们之间可以互相替换，此模式让算法的变化，不会影响到使用算法的客户。

三个角色
策略模式中主要有三个角色：

抽象策略类Strategy：定义所有支持的算法的公共接口，可以是接口也可以是抽象类。
具体策略类Concrete Strategy：封装具体的算法或者行为。
环境类Conte...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-迭代器模式 (Iterator)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104557890</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104557890</guid><author>Dh_Chao</author><pubDate>Fri, 28 Feb 2020 15:47:15 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

提供一种方法顺序访问一个聚合对象中的各个元素，而又不暴露其内部的表示。

四个角色
迭代器模式主要有以下四个角色：

抽象聚合角色Aggregate：定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
具体聚合角色Concrete Aggregate：实现抽象聚合类，返回一个具体的迭代器实例。
抽象迭代器Iter...]]></description><category></category></item><item><title><![CDATA[Java设计模式之行为型-模板方法模式 (Template Method)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104539274</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104539274</guid><author>Dh_Chao</author><pubDate>Thu, 27 Feb 2020 16:42:42 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

定义一个算法的步骤，并允许子类为一个或者多个步骤提供实现。

模板方法使得子类可以在不改变算法结构的情况下，重新定义算法中的某些步骤。
场景示例
笔者这里以做番茄炒蛋为例。笔者将做番茄炒蛋的步骤分为以下几步：倒油、放鸡蛋、放番茄、倒调料、翻炒。不考虑多余的细节问题，不同的人做番茄炒蛋的步骤应该是类似的。
创建抽象模板...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-代理模式 (Proxy)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104527723</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104527723</guid><author>Dh_Chao</author><pubDate>Wed, 26 Feb 2020 23:31:08 +0800</pubDate><description><![CDATA[结构型-代理模式 (Proxy)
????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

为其他对象提供一种代理用来控制对这个对象的访问。

在代理模式中，代理对象作为访问对象和目标对象之间的中介。
场景示例
笔者这里以购买火车票为例。我们购买火车票不一定要去火车站购买，我们可以通过12306网站或者去火车票代售点购买。
基于继承的静态代理实现
创建目标对象
/**
 *...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-桥接模式 (Bridge)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104518372</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104518372</guid><author>Dh_Chao</author><pubDate>Wed, 26 Feb 2020 15:47:07 +0800</pubDate><description><![CDATA[结构型-桥接模式 (Bridge)
????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

将抽象部分与它的具体实现部分分离，使它们都可以独立地变化。

桥接模式是通过组合的方式建立两个类之间的联系，而不是通过继承。
四个角色
桥接模式中主要有以下四个角色：

抽象化角色Abstraction：定义抽象类，同时包含一个对实现化对象的引用。
扩展抽象化角色Refined A...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-组合模式 (Composite)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104446543</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104446543</guid><author>Dh_Chao</author><pubDate>Sat, 22 Feb 2020 17:03:34 +0800</pubDate><description><![CDATA[结构型-组合模式 (Composite)
????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

将对象组合成树形结构以表示“部分-整体”的层次结构。

组合模式使得用户对单个对象和组合对象的使用具有一致性。
模式中的角色

抽象构件Component：为组合中的叶节点对象和分支节点对象声明公共接口并实现它们的默认行为。
树叶构件Leaf：是组合中的叶节点对象，叶节点没有...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-享元模式 (Flyweight)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104351257</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104351257</guid><author>Dh_Chao</author><pubDate>Sun, 16 Feb 2020 23:41:00 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

运用共享技术有效地支持大量细粒度的对象。

“享”即共享，“元”指的是元件，也就是小颗粒的东西。“享元”顾名思义就是共享小部件。
很多的系统程序包含大量的对象，但是这些对象绝大多数都是差不多的，除了一些极个别的属性外。
那么也就是说，在一个系统程序中有多个相同对象的时候，我们只需要共享一份就可以了，不必去实例化每一个...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-适配器模式 (Adapter)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104317692</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104317692</guid><author>Dh_Chao</author><pubDate>Fri, 14 Feb 2020 19:21:22 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

将一个类的接口转换成客户端期望的另一个接口。

适配器模式可以使原本接口不兼容的类可以一起工作。
两种模式
适配器模式有两种模式：

对象适配器：采用组合方式进行类的委托
类适配器：采用继承方式

三种角色

目标角色(Target)：客户端所期待的接口(也可以是具体类或者抽象类)。
源角色(Adaptee)：被适配...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-装饰器模式 (Decorator)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104305430</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104305430</guid><author>Dh_Chao</author><pubDate>Fri, 14 Feb 2020 00:52:22 +0800</pubDate><description><![CDATA[????文章示例代码????
装饰器模式对于笔者来说，印象还是比较深刻的。因为当年笔者考软件设计师的设计模式大题考的就是这个模式，差点阵亡。
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

动态地为一个对象添加一些额外的职责。

在扩展原有对象功能上，装饰器模式比继承的方式更加灵活。
模式中的角色

抽象构建(Component)：定义一个抽象接口(可以是抽象类)，用以给对象动态地添加职责。
...]]></description><category></category></item><item><title><![CDATA[Java设计模式之结构型-外观模式 (Facade)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104298966</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104298966</guid><author>Dh_Chao</author><pubDate>Thu, 13 Feb 2020 17:13:17 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

为子系统中的一组接口提供一个一致的界面，此模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。

外观模式又叫门面模式，是符合迪米特法则的。
场景示例
作为一个病人去医院看病，可能需要经过挂号、门诊、划价、取药这几个步骤。
相对来说过程可能较为繁琐，先来看下代码层面是如何实现的。
创建实体类
/**
 * @...]]></description><category></category></item><item><title><![CDATA[Java设计模式之创建型-原型模式 (Prototype)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104293116</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104293116</guid><author>Dh_Chao</author><pubDate>Thu, 13 Feb 2020 11:53:40 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。

原型模式不需要知道任何创建的细节，也不调用构造函数。
三个基本步骤
原型模式的核心在于原型类，而满足原型模式的原型类需要进行以下三个步骤：

实现Cloneable接口。 Cloneable 接口实际上是个空接口(标记接口)。表明只有实现该接口才能够...]]></description><category></category></item><item><title><![CDATA[Java设计模式之创建型-单例模式 (Singleton)]]></title><link>https://blog.youkuaiyun.com/Dh_Chao/article/details/104282804</link><guid>https://blog.youkuaiyun.com/Dh_Chao/article/details/104282804</guid><author>Dh_Chao</author><pubDate>Wed, 12 Feb 2020 18:07:03 +0800</pubDate><description><![CDATA[????文章示例代码????
附链
你也可以在这些平台阅读本文：

语雀
个人博客

定义

保证一个类有且仅有一个实例，并且提供一个可以访问它的全局访问点。

三个基本步骤
实现单例模式有三个基本的步骤：

私有构造方法用来限制外部类对其直接实例化
提供一个私有静态当前类的对象作为变量
提供一个公有静态方法返回类的实例

实现单例模式的几种方式
懒汉式
懒汉式单例模式在类创建的时候不会创建实例，因此类的加载...]]></description><category></category></item></channel></rss>