首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何掌握状态模式,提升目的可维护性和可扩展性?

ps:行为抽离到状态类上,不仅是因为对象,if-else判断状态违背了开闭原则,而且抽离到状态后,对扩展更好,添加新状态和新行为更方便。 我们接着完善状态类。...public class ContextObject{ // 对象维护的状态 private State state; //设置新状态 public void setState(State...context.handle(); // 执行完上一步,context状态变化了。可以接着执行变化后的状态对应的行为。...状态的变化可以在具体的State类变化,也可以在使用ContextObject的时候进行变化;但就是不能在ContextObject类变化。...增加一个状态非常简单; 增强了封装性,每个状态的行为操作都被封装到一个状态。 缺点类变多了~~哈哈(放心,你写的内容没有变多哦) 再次强调一下:对象的行为随着状态的变化而不同的情况,请用状态模式。

15920
您找到你想要的搜索结果了吗?
是的
没有找到

面试加分-HashMap源码这些常量设计目的你知道吗

前言 之前周会技术分享,一位同事讲解了HashMap的源码,涉及到一些常量设计的目的,本文将谈谈这些常量为何这样设计,希望大家有所收获。...这个回答解释:一个bucket空和非空的概率为0.5,通过牛顿二式等数学计算,得到这个loadfactor的值为log(2),约等于0.693。...当添加元素的时候,如果桶链表元素超过8,会自动转为红黑树。那么阀值为什么是8呢?...0.00015795 * 6: 0.00001316 * 7: 0.00000094 * 8: 0.00000006 * more: less than 1 in ten million 理想状态...为什么java Hashmap 的加载因子是默认为0.75 为什么HashMap链表长度超过8会转换成红黑树 What is the significance of load factor in HashMap

51610

写给初学者的Jetpack Compose教程,Lazy Layout

其中AddButton()函数就是用于定义Fab按钮的,我们将它放置在了屏幕的右下角,并且它的显示状态是受到isVisible这个参数控制的。...除此之外,还可以在Lazy Layout添加item函数来指定单个数据,最终它们都会形成一个整体可滚动的列表。...运行一下程序,效果如下图所示: 提升Lazy Layout性能 目前我们已经将Lazy Layout相关的主要用法都学习的差不多了,最后来关注一下性能方面的问题。...由于我们所使用的数据A-Z本身每个值就是唯一的,因此这里直接指定it即可。...这样,不管是对Lazy Layout的元素进行添加、删除、甚至是重新排序,都不会导致多余的重组发生,性能也就大大提升了。 好了,关于Lazy Layout的性能提升技巧就介绍到这儿。

26410

如何写一个Compose状态页组件 (修正篇)

优化,如何能更实用 在 compose 状态的改变其实我们都应该考虑到是否会对其他组件造成不必要的重组影响,所以 compose 我们应该尽量保证每个组件都 保持独立 。...回到上述的实现,上述方式虽然可以实现,但是不够灵活,比如我们可能还需要将状态提升出去,以便让外部在重组时可以知道当前是什么状态,或者说,我们希望状态由外部自行维护。于是针对此,我们应该怎么做?...我们先看一下通用的设计思路,LazyColumn 就相当于 Android 的 RecyclerView ,而我们如果要监听 LazyColumn 列表当前状态时,就需要手动传递一个 state 进去...默认是使用的 rememberLazyListState() ,具体源码如下: 而 ComposeState 也正是需要这样的一个实现,借此,所以我们可以定一个通用的状态管理类,其目的就是保存当前的状态...总结 本篇涉及到的一些 Compose 的概念: 副作用的处理 重启效应 状态提升 最后,非常感谢以上反馈过的同学。本篇拖了挺久,向看过上一篇的同学再说一声抱歉。

1K10

compose--CompositionLocal、列表LazyColumn&LazyRow、约束布局ConstraintLayout

通过前面内置组件和修饰符Modifier的使用,结合Stat状态,相信对于一般的开发需求已经没有问题了,接下来对CompositionLocal进行学习,以及对列表组件LazyColumn&LazyRow...外,此外还有LazyVerticalGrid 和 LazyHorizontalGrid 可组合为在网格显示列表项提供支持,用法上是大致相同的 三、约束布局ConstraintLayout ConstraintLayout...,包括第一个可组合之前和最后一个可组合之后的可用空间。...ChainStyle.SpreadInside:空间会在所有可组合之间均匀分布,不包括第一个可组合之前或最后一个可组合之后的任何可用空间。...ChainStyle.Packed:空间会分布在第一个可组合之前和最后一个可组合之后,各个可组合之间没有空间,会挤在一起。

76230

Android Compose开发

此外,当两更新以出人意料的方式发生冲突时,也很容易造成异常状态。例如,某项更新可能会尝试设置刚刚从界面移除的节点的值。一般来说,软件维护的复杂性会随着需要更新的视图数量而增长。...style = MaterialTheme. typography. body2 ) } } } } 状态提升...以下是你应该考虑的状态提升最少应该到达哪个层级的关键因素: 如果有多个 Composable 函数需要读取同一个 State 对象,那么至少要将 State 提升到这些 Composable 函数共有的父级函数当中...然后使用 cachedIn () 函数,将流缓存在 viewModelScope ,以便在组件重新合成时保留数据状态。...综上所述,这段代码的作用是创建一个可流式访问的分页数据流,并将其缓存在 viewModelScope ,以便在组件生命周期内保留数据状态

18010

欢迎体验 | Wear OS 版 Compose 开发者预览版

就像在移动设备上一样,欢迎您立即着手测试,我们也希望在发布 Beta 版前,将您的 反馈 纳入库的早期迭代。 本文将回顾我们构建的几个主要可组合,并介绍帮助您开始使用的多种资源。 现在就开始吧!...尽管从技术上说,可以在 Wear OS 上使用移动依赖,但我们还是建议您使用专用于 Wear 的版本以获取最佳体验。 注意: 我们将在未来版本添加更多 Wear 可组合。...以下是开发库中一些可组合的示例: 按钮 卡片 图标 文本 除此之外,我们还引入了许多可提升 Wear 体验的全新可组合: Chip ToggleChip BasicCurvedText TimeText...我们还为列表提供了一个针对 Wear 优化的可组合 ScalingLazyColumn,扩展了 LazyColumn并添加了缩放和透明度更改,以更好地支持圆形界面。...SwipeDismissableNavHost,该可组合与移动设备 NavHost 的工作原理很像,不过也支持开箱即用的滑动关闭手势 (实际在后台使用 SwipeToDismissBox)。

1.6K10

android Compose沉浸式设计和导航栏的处理

简单写一篇文章捕获一下焦点 Material Design风格的顶部和底部导航栏 ComposeMaterial Design风格的设计我们的做法如下: 1、使用Scafoold作为页面的顶级,Scafoold...承载topbar和bottombar分别作为顶部导航栏和底部导航栏。...(window, false)设置后页面布局顶到了状态栏的上面,因为我们需要用一个Spacer来填充状态栏,让我们的布局看起来正常点 代码 如下是封装的状态栏方法 @Composable fun TopBarView...WindowCompat.setDecorFitsSystemWindows(window, false)处理了页面后,Scafoold的内容区域也会被顶到底部导航栏的下方,同样也需要我们处理 以下是处理前和处理后的代码和效果 处理前 代码 LazyColumn...} } 复制代码 效果 这里只展示到第27个item,第28、29个item没有展示出来,所以需要处理才行 处理后 代码 {padding-> LazyColumn

2.6K20

Android | Compose 生命周期和附带效应

image.png 前言 可组合 应该没有附带效应,但是,如果在对应用状态进行转变时需要使用可组合。...生命周期 当 Compose 首次运行可组合的时候,在初始组合期间,他将跟踪为了描述界面而调用的组合。当应用的状态发生变化时,Compose 会安排重组。...可组合的生命周期通过以下事件定义:进入组合,执行0次或者多次,最后退出组合 image.png 状态和效应用例 如官方文档所述,可组合应当没有附带效应,如果需要更改应用状态,则就应该使用 Effect...LaunchedEffect 在某个可组合的作用域内运行挂起函数。如果需要从组合安全带的调用挂起函数,请使用 LaunchedEffect 可组合。...如果需要与非 Compose 管理的对象共享 Compose 状态,请使用 SideEffect 可组合,因为每次成功重组都会调用该可组合, 例如:每次重组的时候都设置状态栏 @Composable

1.2K10

2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A第i个题目的难度为ai 题库B

2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号每个题目都有一个难度值题库A第i个题目的难度为ai题库B第i个题目的难度为bi题库C第i个题目的难度为ci...但不能大于第一题难度的两倍第三题的难度必须大于第二题的难度,但不能大于第二题难度的两倍小美想知道在满足上述要求下,有多少种不同的题目组合(三道题目中只要存在一道题目不同,则两个题目组合就视为不同输入描述 第一行一个正整数n, 表示每个题库的题目数量第二行为...n个正整数a1, a2,...... an,其中ai表示题库A第i个题目的难度值第三行为n个正整数b1, b2,...... bn,其中bi表示题库B第i个题目的难度值第四行为n个正整数c1, c2...,...... cn,其中ci表示题库C第i个题目的难度值1 <= n <= 20000, 1 <= ai, bi, ci <= 10^9。

39410

Jetpack-Compose 学习笔记(一)—— Compose 初探

这个属性的信息应该都要提供,除非此图只是用于装饰的目的,或者并没有表示用户有特殊意义的操作。此外,属性的信息文本应该存放在本地资源,如 res 目录下的 string 或类似的地方。" 额。。。...4.3 Compose 状态初探 Compose 的核心内容就是响应 state 状态的改变。...那么 LazyColumn 就相当于 Compose 的 RecyclerView,用于展示可滑动的长列表。它提供了 items API 用于展示简单的列表布局。...;2)更新 ViewModel 的可观察(原理同1));3)更新 SharedPreference(原理同1))。...3、重组会跳过尽可能多的内容 Compose 会尽力只重组需要更新的部分,每个 Composable 函数和 lambda 又可以自行重组更新。

1.9K10

【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置的光标移动与选中状态 | 保存配置 | 配置帮助文档 )

文章目录 一、打开 Linux 内核编译 菜单配置 二、菜单配置的光标移动与选中状态 三、保存配置 四、配置帮助文档 一、打开 Linux 内核编译 菜单配置 ---- 执行 make menuconfig...命令 , 弹出菜单配置 ; 二、菜单配置的光标移动与选中状态 ---- 其中左侧的 * 表示选中状态 , 通过 上下箭头 按键 , 可以上下移动光标 , 按下 空格 按键 , 可以切换 选中 / 取消选中...状态 , 选中状态下 , 条目左侧会显示 * 符号 ; 按下 左右 箭头按键 , 会切换下面的 选项 ; 三、保存配置 ---- 选择 底部的 Save 选项 , 然后按回车 , 即可保存配置 ,...点击 OK , 继续下一步 , 保存完成 , 选择 Exit 退出 ; 内核的编译配置保存在了 .config 文件 ; 四、配置帮助文档 ---- 在菜单配置 , 可以选择裁剪一些内核模块..., 内核越小 , 运行速度越快 ; 上面的内核编译选项 , 如果不清楚细节 , 暂时按照默认配置编译即可 ; 如果想要了解某一配置的具体作用 , 选中指定的 , 如 : 按下 " Shift +

2.2K20
领券