<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Harvay的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Harvay</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Harvay]]></copyright><item><title><![CDATA[【规则引擎】规规则引擎的介绍与项目实践（ 基于json-rule-engine）]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/127734250</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/127734250</guid><author>Harvay</author><pubDate>Tue, 08 Nov 2022 10:26:00 +0800</pubDate><description><![CDATA[规则引擎介绍、node规则引擎json-rule-engine介绍与项目实践]]></description><category></category></item><item><title><![CDATA[【前端技术】Vue3 技术学习笔记]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/126477139</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/126477139</guid><author>Harvay</author><pubDate>Wed, 31 Aug 2022 09:23:26 +0800</pubDate><description><![CDATA[Vue3学习记录
组合式api与新特性]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 解释器模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113824750</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113824750</guid><author>Harvay</author><pubDate>Tue, 16 Feb 2021 15:13:33 +0800</pubDate><description><![CDATA[解释器模式
定义
给分析对象定义一个语言，并定义该语言的文法表示，再设计一个解释器来解释语言中的句子。该模式实现了文法表达式处理的接口，该接口解释一个特定的上下文。
特点
优点

扩展性好。由于在解释器模式中使用类来表示语言的文法规则，因此可以通过继承等机制来改变或扩展文法；
容易实现。在语法树中的每个表达式节点类都是类似的，所以实现其文法较为容易。

缺点

执行效率较低。解释器模式中通常使用大量的循环和递归调用，当要解释的句子较复杂时，其运行速度很慢，且代码的调试过程也比较麻烦；
会引起类膨胀。解释器模]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 备忘录模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113815726</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113815726</guid><author>Harvay</author><pubDate>Mon, 15 Feb 2021 14:24:00 +0800</pubDate><description><![CDATA[备忘录模式
定义
在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态，以便以后当需要时能将该对象恢复到原先保存的状态。又叫快照模式。
特点
优点

提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态；
实现了内部状态的封装。除了创建它的发起人之外，其他对象都不能访问这些状态信息；
简化了发起人 类。发起人不需要管理和保存其内部状态的各个备份，所有状态信息都保存在备忘录中，并由管理者进行管理，这符合单一职责原则。

缺点
资源消耗大。如果要保存的内部状态]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 访问者模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113813694</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113813694</guid><author>Harvay</author><pubDate>Mon, 15 Feb 2021 10:48:48 +0800</pubDate><description><![CDATA[访问者模式
定义
将作用于某种数据结构中的各元素的操作分离出来封装成独立的类，使其在不改变数据结构的前提下添加作用于这些元素的新的操作，为数据结构中的每个元素提供多种的访问方式。它将对数据的操作与数据结构进行分离，是行为类模式中最复杂的一种模式。
特点
优点

扩展性好。能够在不修改对象结构中的元素的情况下，为对象结构中的元素添加新的功能；
复用性好。可以通过访问者来定义整个对象结构通用的功能，从而提高系统的复用程度；
灵活性好。访问者模式将数据结构与作用于结构上的操作解耦，使得操作集合可以相对自由地演化而]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 迭代器模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113803368</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113803368</guid><author>Harvay</author><pubDate>Sun, 14 Feb 2021 21:21:53 +0800</pubDate><description><![CDATA[迭代器模式
定义
提供一个对象来顺序访问聚合对象中的一系列对象，而不暴露聚合对象的内部表示。属于一种对象行为型模式。
特点
优点

访问聚合对象内部无需暴露它的内部表示；
遍历任务交由迭代器完成，简化了聚合类；
它支持以不同方式遍历一个聚合，甚至可以自定义迭代器的子类以支持新的遍历；
增加新的聚合类和迭代器类很方便，无需修改原有代码；
封装性良好，为遍历不同的聚合结构提供1一个统一的接口。

缺点
增加了类的个数，在一定程度上增加了系统的复杂度。
结构与实现
结构
主要角色：

抽象聚合对象：定义存储、添加]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 中介者模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113797331</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113797331</guid><author>Harvay</author><pubDate>Fri, 12 Feb 2021 22:28:07 +0800</pubDate><description><![CDATA[中介者模式
定义
定义一个中介对象来封装一系列对象之间的交互，使原有对象之间的耦合松散，且可以独立地改变它们之间的交互。中介者模式又叫调停模式，它是迪米特法则的典型应用。
特点
优点

类之间职责清晰，符合迪米特法则；
对象之间的耦合性降低，使得对象易于独立地被复用；
将对象间的一对多关联转变为一对一的关联，提高系统的灵活性，使得系统易于维护和扩展。

缺点
中介这模式将原本多个对象直接的相互依赖变成了中介者和对个对象类的依赖关系。当同事类越多时，中介者就会越臃肿，变得复杂难以维护。
结构与实现
结构
主要]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 观察者模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113785352</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113785352</guid><author>Harvay</author><pubDate>Wed, 10 Feb 2021 20:54:00 +0800</pubDate><description><![CDATA[观察者模式
定义
指多个对象间存在一对多的依赖关系，当一个对象的状态发生改变时，所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式，属于对象行为型模式。
特点
优点

降低了目标与观察者之间的耦合关系，两者之间是抽象耦合关系，符合依赖倒置原则；
目标与观察者之间建立了一套触发机制。

缺点

目标与观察者之间的依赖关系并没有完全解除并且有可能出现循环引用；
当观察者对象很多时，通知的发布会花费很多时间，影响程序的效率。

结构与实现
结构
主要角色：

抽象主题角色：]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 状态模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113782336</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113782336</guid><author>Harvay</author><pubDate>Wed, 10 Feb 2021 16:13:33 +0800</pubDate><description><![CDATA[状态模式
定义
对有状态的对象，把复杂的“判断逻辑”提取到不同的状态对象中，允许状态对象在其内部状态发生改变时改变其行为。
特点
优点

结构清晰，状态模式将于特定状态相关的行为局部化到一个状态中，并且将不同状态的行为分割开来，满足“单一职责原则”；
将状态装换显示化，减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态装换变得更加明确，且减少对象间的相互依赖；
状态类职责明确，有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。

缺点

状态模式的使用必然会增加系统的类与对象的个数；
]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 责任链模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113739720</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113739720</guid><author>Harvay</author><pubDate>Sun, 07 Feb 2021 21:46:42 +0800</pubDate><description><![CDATA[责任链模式
定义
也叫职责链模式，是为了避免请求发送者与多个请求处理者耦合在一起，于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链；当有请求发生时，可将请求沿着这条链传递，直到有对象处理它为止。
责任链模式中，客户只需要将请求发送到责任链上即可，无须关心请求的处理细节和请求的传递过程，请求会自动进行传递。责任链将请求发送者和请求处理者解耦了。
特点
优点

降低了对象之间的耦合度。使对象无须知道到底是哪一个对象处理其请求以及链的结构，发送者和接收者也无须拥有对方的明确信息；
增强了系统的]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 命令模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113729398</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113729398</guid><author>Harvay</author><pubDate>Sat, 06 Feb 2021 20:14:49 +0800</pubDate><description><![CDATA[命令模式
定义
将一个请求封装为一个对象，使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通，这样方便将命令对象进行存储、传递、调用、增加和管理。
特点
优点

通过引入中间件（抽象接口）降低系统的耦合度；
扩展性良好，增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类，即满足“开闭原则”；
可以实现宏命令。命令模式可以和组合模式结合，将多个命令装配成一个组合命令，即宏命令；
方便实现Undo和Redo操作。命令模式可以与后面介绍的备忘录模式结合，实现命令的撤销与恢复；
]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 策略模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113592482</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113592482</guid><author>Harvay</author><pubDate>Wed, 03 Feb 2021 12:22:55 +0800</pubDate><description><![CDATA[策略模式
定义
该模式定义了一系列算法，并将每个算法封装起来，使他们可以相互替换，且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式，通过对算法进行封装，把使用算法的责任和算法的实现分割开，并委派给不同的对象对这些算法进行管理。
特点
优点

使用策略模式可以避免多重条件语句，提高可维护性；
通过提供可供重用的算法族，恰当使用继承可以把算法族的公共代码转移到父类里面，从而避免重复的代码；
可以提供相同行为的不同代码，可以更根据实际场景进行选择；
提供了对开闭原则的完美支持，可以再不修改源代码的情况]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 模板方法]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113589100</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113589100</guid><author>Harvay</author><pubDate>Wed, 03 Feb 2021 11:38:35 +0800</pubDate><description><![CDATA[模板方法
定义
定义一个操作中的算法骨架，而将算法的一些步骤延迟到子类中，使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。属于类行为型模式。
特点
优点

封装了不变部分，拓展可变部分。它把认为是不变部分的算法封装到父类中实现，而把可变部分算法由子类继承实现，便于子类继续扩展；
在父类中提取了公共的部分代码，便于代码复用；
部分方法是由子类实现的，因此子类可以通过扩展方法增加相应的功能，符合开闭原则。

缺点

对不同的实现都需要定义一个子类，会导致类的个数增加，系统更加庞大，设计也更加抽象]]></description><category></category></item><item><title><![CDATA[【设计模式】行为型模式 - 概述]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113588764</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113588764</guid><author>Harvay</author><pubDate>Wed, 03 Feb 2021 10:55:37 +0800</pubDate><description><![CDATA[行为型模式用于描述程序在运行时复杂的流程控制，即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务，设计算法与对象间职责的分配。
一般分为 类行为模式和对象行为模式，前者采用继承机制来在类间分派行为，后者采用组合或聚合在对象间分配行为。由于组合关系或者聚合关系比继承关系耦合度低，满足“合成复用原则”，所以对象行为模式比类型为模式具有更大的灵活性。
行为型模式包含一下11种模式：

模板方法（Template Method）模式：定义一个操作中的算法骨架，将算法的一些步骤延迟到子类中，使得子]]></description><category></category></item><item><title><![CDATA[【设计模式】结构型模式 - 组合模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/113519098</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/113519098</guid><author>Harvay</author><pubDate>Wed, 03 Feb 2021 10:25:17 +0800</pubDate><description><![CDATA[组合模式
定义
又称为整体-部分模式，它是一种将对象组合成树状的层次结构的模式，用来表示“整体-部分”的关系，使用户对单个对象和组合对象具有一致的访问性，属于结构性设计模式。
特点
优点
缺点

...]]></description><category></category></item><item><title><![CDATA[【设计模式】结构型模式 - 享元模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/112916458</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/112916458</guid><author>Harvay</author><pubDate>Thu, 21 Jan 2021 11:35:45 +0800</pubDate><description><![CDATA[享元模式
定义
运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销，从而提高系统的资源利用率。
本质是缓存共享对象，降低内存消耗。
特点
优点
相同对象只要保存一份，以此降低系统中对象的数量，从而降低系统中细粒度对象给内存带来的压力。
缺点

为了使对象可以共享，需要将一些不能共享的状态外部化，这将增加程序的复杂性；
读取享元模式的外部状态会使得运行时间稍微变长。

结构与实现
结构
享元模式的定义提出了两个要求：细粒度和共享对象。这些]]></description><category></category></item><item><title><![CDATA[【设计模式】结构型模式 - 外观模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/112909189</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/112909189</guid><author>Harvay</author><pubDate>Wed, 20 Jan 2021 20:15:47 +0800</pubDate><description><![CDATA[外观模式
定义
又叫做门面模式，是一种通过为多个复杂的子系统提供一个一致的接口，而使这些子系统更加容易被访问的模式，该模式对外有一个统一接口，外部应用程序不用关系内部子系统的具体细节，这样降低应用程序的复杂度，提高了程序的可维护性。
特点
优点
外观模式是“迪米特法则” 的典型应用，主要有以下主要优点：

降低了子系统与客户端之间的耦合度，使得子系统的变化不会影响调用它的客户类；
对客户屏蔽了子系统组件，减少了客户处理的对象数目，并使得子系统使用起来更加容易；
降低了大型软件系统中的编译依赖性，简化了系统在]]></description><category></category></item><item><title><![CDATA[【设计模式】结构型模式 - 装饰模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/112908274</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/112908274</guid><author>Harvay</author><pubDate>Wed, 20 Jan 2021 19:42:35 +0800</pubDate><description><![CDATA[装饰模式
定义
在不改变现有对象结构的情况下， 动态地给该对象增加一些职责（即增加其额外功能）的模式，它属于对象结构性模式。
特点
优点

装饰器是继承的有力补充，比继承灵活，在不改变原有对象的情况下，动态的给一个对象扩展功能，即插即用；
通过使用不用装饰类及这些装饰类的排列组合，可以实现不同效果；
装饰器模式完全遵守开闭原则。

缺点
主要缺点是：会增加很多子类，过度使用会增加程序的复杂性。
结构与实现
结构
主要角色：

抽象构件角色：定义一个抽象接口以规范准备接受附加责任的对象；
具体构件角色：实现抽]]></description><category></category></item><item><title><![CDATA[【设计模式】结构型模式 - 桥接模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/112896595</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/112896595</guid><author>Harvay</author><pubDate>Wed, 20 Jan 2021 17:20:55 +0800</pubDate><description><![CDATA[桥接模式
定义
将抽象与实现分离，使它们可以独立变化。它是用组合关系代替继承关系来实现，从而降低了抽象和实现这两个可变维度的耦合度。
桥接模式遵循了里氏替换原则和依赖倒置原则，最终实现了开闭原则，对修改关闭，对扩展开放。
特点
优点

抽象与实现分离，扩展能力强；
符合开闭原则；
符合合成复用原则；
其实现细节对客户透明。

缺点
由于聚合关系建立在抽象层，要求开发者针对抽象化进行设计与编程，能正确地识别出系统中两个独立变化的维度，这增加了系统的理解和设计难度。
结构与实现
结构
主要角色：

抽象化角色：]]></description><category></category></item><item><title><![CDATA[【设计模式】结构型模式 -适配器模式]]></title><link>https://blog.youkuaiyun.com/Harvay/article/details/112884197</link><guid>https://blog.youkuaiyun.com/Harvay/article/details/112884197</guid><author>Harvay</author><pubDate>Wed, 20 Jan 2021 16:52:48 +0800</pubDate><description><![CDATA[适配器模式
定义
将一个类的接口转换成客户希望的另外一个接口，使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种，前者类之间的耦合度比后者高，且要求程序员了解现有组件库中的相关组件的内部结构，所以应用相对较少些。
特点
优点

客户端通过适配器可以透明地调用目标接口；
复用了现存的类，无需修改原有代码而重用现有的适配者类；
将目标类和适配者类解耦，解决了目标类和适配者类接口不一致的问题；
在很多业务场景中符合开闭原则。

缺点

适配器编写过程需要结合业务]]></description><category></category></item></channel></rss>