草庐IT

设计模式之状态模式

状态模式又称状态对象模式,属于行为型模式;状态模式允许一个对象在其内部状态改变的时候改变其行为,这个对象看上去就像是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的子类,状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用if-else或switch-case语句来做状态判断,再进行不同情况的处理。但是显然这种做法对复杂的状态判断存在天然弊端,条件判断语句会过于臃肿,可读性差,且不具备扩展性,维护难度也大。且增加新的状态时要添加新的if

大家都能看得懂的源码 - ahooks 这些 hook 更优雅管理你的状态

本文是深入浅出ahooks源码系列文章的第十二篇,该系列已整理成文档-地址。觉得还不错,给个star支持一下哈,Thanks。今天我们来聊聊ahooks中那些可以帮助我们更优雅管理我们state(状态)的那些hook。一些比较特殊的,比如cookie/localStorage/sessionStorage,useUrlState等,我们已经单独拿出来细讲了,感兴趣可以看看笔者的历史文章。useSetState管理object类型state的Hooks,用法与class组件的this.setState基本一致。先来了解一下可变数据和不可变数据的含义和区别如下:可变数据(mutable)即一个数据

Compose 下拉刷新库——ComposeRefreshLayout

在进行Compose应用开发时,发现没有下拉刷新上拉加载,没有Android原生提供的SwipeRefreshLayout。查看官方simple样例(https://github.com/android/compose-samples),在官方样例的基础进行简单封装,编写的了ComposeRefreshLayout库(github:https://github.com/xiaoyu00/ComposeRefreshLayout) ComposeRefreshLayout 是一个简单易用的下拉刷新库,代码简单易用,可自定义刷新头与上拉加载View。效果展示说明因刷新头与上拉加载View全部为自定

大家都能看得懂的源码 - ahooks 这些 hook 更优雅管理你的状态

本文是深入浅出ahooks源码系列文章的第十二篇,该系列已整理成文档-地址。觉得还不错,给个star支持一下哈,Thanks。今天我们来聊聊ahooks中那些可以帮助我们更优雅管理我们state(状态)的那些hook。一些比较特殊的,比如cookie/localStorage/sessionStorage,useUrlState等,我们已经单独拿出来细讲了,感兴趣可以看看笔者的历史文章。useSetState管理object类型state的Hooks,用法与class组件的this.setState基本一致。先来了解一下可变数据和不可变数据的含义和区别如下:可变数据(mutable)即一个数据

Compose 下拉刷新库——ComposeRefreshLayout

在进行Compose应用开发时,发现没有下拉刷新上拉加载,没有Android原生提供的SwipeRefreshLayout。查看官方simple样例(https://github.com/android/compose-samples),在官方样例的基础进行简单封装,编写的了ComposeRefreshLayout库(github:https://github.com/xiaoyu00/ComposeRefreshLayout) ComposeRefreshLayout 是一个简单易用的下拉刷新库,代码简单易用,可自定义刷新头与上拉加载View。效果展示说明因刷新头与上拉加载View全部为自定

谈谈 Vue shallowRef 和 shallowReactive

深层次响应式reactive和ref创建的对象都是深层次的,对象的根属性和嵌套属性都是响应式的。深层次转换是递归地转为响应式,对象里的每个属性访问都将触发代理的依赖追踪,这种性能负担通常这只有在处理超大型数组或层级很深的对象时才比较明显。例如,一次渲染需要访问100000+个属性时,才会变得比较明显。因此,shallowRef或shalloReactive只在少数特定的场景才会使用。conststate=reactive({foo:{bar:1},foobar:2});浅层次响应式shallowReactiveshallowReactive创建的响应式对象只在其根属性是响应式的,对所有深层的对

谈谈 Vue shallowRef 和 shallowReactive

深层次响应式reactive和ref创建的对象都是深层次的,对象的根属性和嵌套属性都是响应式的。深层次转换是递归地转为响应式,对象里的每个属性访问都将触发代理的依赖追踪,这种性能负担通常这只有在处理超大型数组或层级很深的对象时才比较明显。例如,一次渲染需要访问100000+个属性时,才会变得比较明显。因此,shallowRef或shalloReactive只在少数特定的场景才会使用。conststate=reactive({foo:{bar:1},foobar:2});浅层次响应式shallowReactiveshallowReactive创建的响应式对象只在其根属性是响应式的,对所有深层的对

你可能不那么知道的Tomcat生命周期管理 | 博学谷狂野架构师

Tomcat生命周期管理各种组件如何统一管理Tomcat的架构设计是清晰的、模块化、它拥有很多组件,加入在启动Tomcat时一个一个组件启动,很容易遗漏组件,同时还会对后面的动态组件拓展带来麻烦。如果采用我们传统的方式的话,组件在启动过程中如果发生异常,会很难管理,比如你的下一个组件调用了start方法,但是如果它的上级组件还没有start甚至还没有init的话,Tomcat的启动会非常难管理,因此,Tomcat的设计者提出一个解决方案:用Lifecycle管理启动,停止、关闭。生命周期统一接口Tomcat内部架构中各个核心组件有包含与被包含关系,例如:Server包含了Service.Ser

浅谈PHP设计模式的备忘录模式

简介:备忘录模式,属于行为型的设计模式。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。备忘录模式顾名思义,就是存档功能,类似Git工具,每次提交都相当于一次备份。主要有一下角色构成Memento——负责存储Originator的唯一内部状态,它可以包含:string,number,array,类的实例等等。Memento「不是公开的类」(任何人都不应该且不能更改它),并防止Originator以外的对象访问它,它提供2个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可

你可能不那么知道的Tomcat生命周期管理 | 博学谷狂野架构师

Tomcat生命周期管理各种组件如何统一管理Tomcat的架构设计是清晰的、模块化、它拥有很多组件,加入在启动Tomcat时一个一个组件启动,很容易遗漏组件,同时还会对后面的动态组件拓展带来麻烦。如果采用我们传统的方式的话,组件在启动过程中如果发生异常,会很难管理,比如你的下一个组件调用了start方法,但是如果它的上级组件还没有start甚至还没有init的话,Tomcat的启动会非常难管理,因此,Tomcat的设计者提出一个解决方案:用Lifecycle管理启动,停止、关闭。生命周期统一接口Tomcat内部架构中各个核心组件有包含与被包含关系,例如:Server包含了Service.Ser