架构设计
文章平均质量分 92
Android架构设计相关内容。
川峰
8年+Android相关工作经验。专注于移动开发领域。
展开
-
常用设计模式全面总结版(Java&Kotlin)
观察者模式也叫。原创 2023-12-31 11:28:30 · 1797 阅读 · 0 评论 -
《Kotlin核心编程》笔记:设计模式
主流的创建型模式有:工厂方法模式、抽象工厂模式、构建者模式在有些地方会把工厂模式细分为简单工厂、工厂方法模式以及抽象工厂。这里主要介绍简单工厂的模式,它的核心作用就是通过一个工厂类隐藏对象实例的创建逻辑,而不需要暴露给客户端。典型的使用场景就是当拥有一个父类与多个子类的时候,我们可以通过这种模式来创建子类对象。假设现在有一个电脑加工厂,同时生产个人电脑和服务器主机。我们用熟悉的工厂模式设计描述其业务逻辑:以上代码通过调用类的方法来创建不同的子类对象,这样我们就把创建实例的逻辑与客户端之间实现解耦,当对象创原创 2023-12-17 12:00:00 · 1074 阅读 · 0 评论 -
软件开发的201个罪恶之源
在过去的将近两年的时间里,我阅读了好多关于开发/编程相关的书,其中《软件开发的201个原则》这本书是是我最喜欢的书籍之一,它是由计算机科学家 Alan M· Davis(伊利诺伊大学厄巴纳-香槟分校计算机科学博士)在1995年所著。该书中提到的很多原则其实在我过去多年的开发工作生涯中也遇到过很多,真是让人有一种似曾相识又相见恨晚的感觉。当你阅读完这些原则之后,你会惊奇的发现,即便距离该书出版至今已经过去了将近30年的时间,但该书中超过 95% 的原则至今仍然十分受用,它们就像物理学中的基本法则一样,经受原创 2023-03-13 08:00:00 · 1026 阅读 · 0 评论 -
Jetpack Compose 中的架构思想
如果应用打算使用 Jetpack Compose 来开发,那么就可以跟以前的MVC、MVP、MVVM等乱七八糟的架构全部说拜拜,这些名词也将在Android开发当中永远地成为历史。因为 Jetpack Compose 的架构思想非常简单,只有UI层和数据层两层,即上图所示(其中 Domain Layer 是可选的层)。它的核心思想是单向数据流,以数据模型驱动界面,遵循关注点分离的原则。在前面的架构图中可以看到,UI 层其实细分又包含了两层:UI 元素和状态容器(StateHolder)。其中 UI 元素原创 2023-03-08 08:00:00 · 1056 阅读 · 0 评论 -
Jetpack架构组件库:DataStore
Jetpack DataStore 是一种经过改进的新数据存储解决方案,旨在取代 SharedPreferences。DataStore 基于 Kotlin 协程和 Flow 构建而成,提供以下两种不同的实现:Preferences DataStore 用于键值对存储。数据以异步、一致和事务性的方式存储,有助于避免 SharedPreferences 的一些缺点。此实现不需要预定义的架构,也不确保类型安全。Proto DataStore 用于存储类型化对象,数据作为自定义数据类型的实例进行存储。此实现原创 2023-01-29 08:00:00 · 64707 阅读 · 0 评论 -
Jetpack架构组件库:WorkManager
工作使用Worker类定义。Worker类的doWork()方法在提供的后台线程上异步运行。如需为创建一些要运行的工作,请继承Worker类并重写doWork()方法。从doWork()返回的Result会通知服务工作是否成功,以及工作失败时是否应重试工作。:工作成功完成。:工作失败。:工作失败,应根据其重试政策在其他时间尝试。默认情况下,当您的应用启动时,WorkManager 使用适合大多数应用的合理选项自动进行配置。原创 2023-01-28 10:59:56 · 1099 阅读 · 2 评论 -
Jetpack架构组件库:Lifecycle、LiveData、ViewModel
LifecycleOwner 是单一方法接口,表示类具有 Lifecycle。它具有一种方法(即 getLifecycle()),该方法必须由类实现。 此接口从各个类(如 Fragment 和 AppCompatActivity)抽象化 Lifecycle 的所有权,并允许编写与这些类搭配使用的组件。任何自定义应用类均可实现 LifecycleOwner 接口。实现 DefaultLifecycleObserver 的组件可与实现 LifecycleOwner 的组件完美配合,因为所有者可以提供生命周期原创 2023-01-27 08:00:00 · 1466 阅读 · 0 评论 -
Jetpack架构组件库:Hilt
为了执行字段注入,Hilt需要知道如何从相应组件提供必要依赖项的实例。“绑定”包含将某个类型的实例作为依赖项提供所需的信息。向Hilt提供绑定信息的一种方法是构造函数注入。在某个类的构造函数中使用@Inject注解,以告知Hilt如何提供该类的实例:在一个类的代码中,带有注解的构造函数的参数即是该类的依赖项。在本例中,是的一个依赖项。因此,Hilt还必须知道如何提供的实例。注意:在构建时,Hilt会为Android类生成Dagger组件。然后,Dagger。原创 2023-01-26 09:30:00 · 2269 阅读 · 0 评论 -
Jetpack架构组件库:Room
默认表名与类名相同,如需显示指定表名,使用如需显示指定表中的列名,使用每个 Room 实体都必须定义一个主键,用于唯一标识相应数据库表中的每一行。执行此操作的最直接方式是使用@Entity data class User(@PrimaryKey // 主键 val id : Int , val name : String , val age : Int)如需设置主键自动生成,使用。原创 2023-01-26 06:18:57 · 1914 阅读 · 0 评论 -
Compose也能跨平台?Compose Multiplatform是啥?KMM又是什么?
现在的跨平台框架真是跟打了鸡血似的,跟生产队的驴一样玩命的更新啊,一会儿功夫就遍地开花,开发者尤其是Androiders们还能学得过来吗?原创 2022-11-07 17:22:55 · 2476 阅读 · 0 评论 -
关于MVP的项目经验心得以及对Jetpack Compose的思考
Google目前在Android端主推的Jetpack Compose声明式UI框架正是基于单向数据流的架构模型的一种具体实现,在这种架构中,只有两种角色UI和数据,但影响UI更新的只能是状态,普通的数据是不能直接影响UI的,必须变成mutableState(可被观察的可变状态)才行。原创 2022-10-31 10:54:46 · 736 阅读 · 0 评论 -
关于模块化的一些思考/记录
我这里所说的“模块化”可能是更加广义的理解概念,不限于具体的实现方式;通常模块化的目的是为了使得项目更加方便的管理,易于维护,这对于多人团队共同开发同一个项目或者项目业务体积日趋庞大的情况尤为重要。这里只是我对模块化的思考做一些随笔记录,并不是具体指导教程,如有想法欢迎交流。物理隔离所谓的物理隔离也就是代码文件的隔离,我认为这是实现模块化的第一首要任务,即保证你的代码文件相互分隔开来,一方面从...原创 2020-01-30 22:01:40 · 713 阅读 · 0 评论 -
Android MVP模式深入实践探索(一)
其实MVP已经不算新东西了,写这篇文章的目的主要是为了把之前在项目重构中应用的MVP模式做一个整理、总结和记录,把实践代码做成一个可描述可理解的过程。一篇可能写不完,总共打算分几篇来记录,这将包括且不限于以下内容:MVP模式基础结构介绍MVP模式中如何分类,哪些属于View层,哪些该放在Presenter层,哪些该放在Modle层MVP模式中关于View层使用的数据类MVP模式中Vie...原创 2019-06-28 19:25:09 · 436 阅读 · 0 评论 -
Android MVP模式深入实践探索(二)
上一篇总结了MVP模式的基础结构,这一篇主要总结在MVP模式中该如何进行分类,即哪些属于View层,哪些该放在Presenter层,哪些该放在Modle层,如何从一堆杂乱的UI代码中将相关代码提取到MVP对应的层次当中。先从View层说起,对于View层其实是最好划分的,首先想到的是Activity、Fragment、Dialog等系统的组件,还有加载我们的布局文件,进行findView操作,对...原创 2019-07-04 21:47:42 · 365 阅读 · 0 评论 -
访问者模式
定义: 在不改变对象数据结构的前提下,定义和封装作用于该数据结构各元素的操作。设计类图: 访问者模式中的角色:Visitor抽象的访问者, 可以是接口或抽象类,声明要操作的具体元素的方法接口,访问者可以有多个。ConcreteVisitor具体的访问者, 实现Visitor的接口方法,实现具体的访问操作。Element抽象的元素, 接口或抽象类,声明接收访问者的方法...原创 2018-06-27 09:06:08 · 203 阅读 · 0 评论 -
抽象工厂模式
定义: 为创建一组相关或依赖的对象提供一个接口,而无需指定它们的具体类。抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道具体的产品是什么。从而使客户从具体的产品中解耦,通用类图设计: AbstractFactory接口提供了一组创建产品的方法,它的实现类ConcreteFactory1和ConcreteFactory2必须实现该方法来创建相关产品,不同的具体工厂...原创 2018-05-11 02:23:07 · 255 阅读 · 0 评论 -
Android Studio中资源文件夹的模块化配置
有时app中res下面的文件太多了想分一下类,如所有的布局文件都在layout文件夹下面,太多的话找起来不方便。一开始我想这个问题大概可以通过配置productFlavor来实现,但是productFlavor中不同的Flavor是互斥的,跟这个还不太一样的。下面是网上学来的分类分法,这里记录一下:第一种分法:gradle配置: sourceSets { main {...原创 2019-06-27 20:43:40 · 2594 阅读 · 0 评论 -
享元模式
定义: 使用共享的方式高效的支持大量的细粒度的对象。享元模式英文名Flyweight,又叫蝇量模式,享元模式主要关注的有两个点:共享对象和细粒度的对象,由于分配太多对象会导致应用性能下降,同时造成内存溢出,享元模式就是为了解决这类问题的共享技术。设计类图: 享元模式中的角色:抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法...原创 2018-06-29 09:46:49 · 399 阅读 · 0 评论 -
UML时序图
一、时序图 时序图是一种强调时间顺序的交互图,在时序图中,首先把参与交互的对象放在图的上方,沿X轴方向排列。通常把发起交互的对象放在左边,较下级对象依次放在右边,然后把这些对象发送和接受的消息沿Y轴方向按时间顺序从上到下放置。这样就提供了控制流随着时间推移的清晰的可视化轨迹。二、时序图元素1、角色 系统角色,可以是人、及其甚至其他的系统或者子系统2、对象对象包括三种命名方式: 第一种...转载 2018-07-10 01:57:25 · 2305 阅读 · 0 评论 -
组合模式
定义: 将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户能以一致的方式处理个别对象和组合对象。设计类图: 组合模式中的角色:列表内容 ...原创 2018-05-24 10:42:21 · 9585 阅读 · 3 评论 -
迭代器模式
定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示。设计类图: 迭代器模式中涉及的角色: 抽象迭代器(Iterator)角色:负责定义遍历和访问元素的接口,是所有迭代器必须实现的接口。具体迭代器(ConcreteIterator)角色:实现迭代器接口,记录目前遍历的位置,完成容器集合元素的遍历。抽象聚合容器(Aggregate)角色:提供一个接...原创 2018-05-22 11:32:37 · 309 阅读 · 0 评论 -
模板方法模式
定义 在一个方法当中定义一个算法的骨架,而将一些步骤延迟到子类当中。使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板的含义就是一个方法, 这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,由子类提供部分实现。设计类图: 示例代码:public abstract class AbstractT...原创 2018-05-15 08:46:52 · 227 阅读 · 0 评论 -
外观模式
定义: 提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,让子系统更容易使用。设计类图: 外观模式又叫做门面模式,看上去是一个比较宏观的模式,它包含的两个主要角色:Facade(外观)角色:提供一个外观接口,对外,它提供一个易于客户端访问的接口,对内,它可以访问子系统中的所有功能。SubSystem(子系统)角色:子系统在整个系统中可以是一个...原创 2018-05-21 09:32:41 · 4433 阅读 · 0 评论 -
装饰者模式
定义: 动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰模式中的角色:抽象构件(Component)角色:Component是一个抽象类或接口,是要包装的原始对象。具体构件(ConcreteComponent)角色:是Component的实现类,最终要装饰的实际对象。装饰(Decorator)角色:是一个抽象类,继承或实现了Compon...原创 2018-04-28 09:09:43 · 5485 阅读 · 4 评论 -
工厂方法模式
定义: 定义了一个创建对象的接口,但是由子类来决定要实例化的是哪一个类。工厂方法使类的实例化延迟到子类中。通用类图: 工厂方法中的角色:Creator抽象的工厂类,提供一个方法可以创建产品类对象,该方法一般是抽象的并由子类去实现ConcreteCreator具体的工厂类,实现Creator中的抽象工厂方法,在该方法中会创造一个具体的产品类对象Product抽象的产品类...原创 2018-05-04 10:55:58 · 327 阅读 · 0 评论 -
适配器模式
定义: 将一个类的接口转换成客户期望的另一个接口,从而使得原本因为接口不兼容而无法一起工作的两个类可以在一起工作。设计类图: 适配器中的角色:目标(Target)角色:客户端所期望的目标接口。源(Adapee)角色:实际需要适配的对象源接口。适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。适配器必须是具体类。示例代码 ...原创 2018-05-17 08:54:26 · 319 阅读 · 0 评论 -
命令模式
啊啊原创 2018-05-16 23:28:46 · 191 阅读 · 0 评论 -
观察者模式
定义: 定义了对象之间的一种一对多的依赖关系,当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新。观察者模式也叫发布订阅模式(Publish/subscribe), 类图如下: 观察者模式中的角色主题角色,主题角色就是被观察者,它可以注册或者删除观察者对象,并且持有一个观察者对象的集合,当状态发生变化时,主题可以通知所有注册的观察集合中的每一个观察者进行更新。...原创 2018-04-26 08:51:43 · 350 阅读 · 0 评论 -
单例模式
定义: 确保一个类只有唯一的一个实例对象,并向整个系统提供方法访问这个实例。单例模式的重点在于全局维持一个唯一的对象,一般是对使用共享资源的同步控制,同时可以避免重复创建对象以节约资源。示例代码:public class Singleton { /** * 静态私有的成员变量持有Singleton对象的引用 */ private sta...原创 2018-05-09 10:49:46 · 326 阅读 · 0 评论 -
原型模式
定义: 给出一个原型对象实例来指定创建对象的类型,并通过拷贝这些原型的方式来创建新的对象。原型模式是简单程度仅次于单例模式的简单模式,它的定义可以简单理解为对象的拷贝,通过拷贝的方式创建一个已有对象的新对象,这就是原型模式。设计类图: 在原型模式中主要的任务是实现一个接口,这个接口具有一个clone方法可以实现拷贝对象的功能,也就是上图中的ProtoType接口。由于在...原创 2018-06-12 09:47:26 · 3669 阅读 · 1 评论 -
代理模式
定义: 为其他对象提供一个代理来控制对这个对象的访问。 定义比较简单,代理模式又叫做委托模式,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。设计类图: 代理模式中的角色:Subject抽象主题角色,可以是一个抽象类或者接口,Subject定义了代理者和被代理者都要实现的接口。RealSubject具体的被代理者角色,它是真实...原创 2018-06-05 10:31:36 · 377 阅读 · 0 评论 -
解释器模式
定义: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。设计类图: 解释器模式中的角色:Expression:抽象表达式,声明一个所有的具体表达式都需要实现的抽象接口;这个接口主要是一个interpret()方法,称做解释操作。Terminal Expression:终结符表达式,实现了抽象表达式所要求的接口;文法中的每一...原创 2018-06-28 01:47:17 · 183 阅读 · 0 评论 -
23种经典设计模式UML类图汇总
原创 2018-07-10 01:32:47 · 306 阅读 · 0 评论 -
Java 23种设计模式汇总链接
OO六大设计原则最全总结篇 UML类图之间的关系创建型模式: 工厂方法模式 单例模式 抽象工厂模式 建造者模式 原型模式结构型模式: 适配器模式 桥接模式 装饰者模式 外观模式 组合模式 代理模式 享元模式行为型模式: 策略模式 观察者模式 模板方法 命令模式 迭代器模式 状态模式 中介者模式 责任链模式 备忘录模式 访问者模式 解释器模...原创 2018-07-10 00:56:41 · 349 阅读 · 1 评论 -
怎样在实践中正确的应用设计模式
保持简单 当你设计时,尽可能的用最简单的方式解决问题。你的目标应该是简单,而不是“如何在这个问题中应用模式”。千万不要认为:如果没有应用设计模式解决问题,就不是一个经验丰富的开发人员。我们只是说,为了让你的设计更加的简单和具有弹性,有时候应用设计模式是最好的方法。尽量让你的设计保持简单,这样才会让其他开发人员认可你的做法。何时应用设计模式 如果在你的设计中确定某个模式可以解决某个问题,那就...原创 2018-07-03 09:37:46 · 1212 阅读 · 0 评论 -
桥接模式
定义: 将抽象和实现解耦,使两者可以独立地变化。设计类图: 桥接模式中的角色:Abstraction抽象化角色,定义该角色的行为,持有对实现化角色的引用,一般是抽象类RefinedAbstraction修正抽象化角色,引用实现化角色对抽象化角色进行修正Implementor实现化角色,是一个接口或实现类,定义实现化角色的行为和属性ConcreteImplemento...原创 2018-07-03 09:30:55 · 423 阅读 · 0 评论 -
责任链模式
定义: 将处理请求的多个对象连成一条链,链上的每个对象都有机会处理该请求,请求会沿着这条链进行传递,直到它被某个对象处理为止。设计类图: 责任链模式的主要角色就是Handler处理者对象,通过类图可以发现它主要有两个特点,一个是可以处理请求的方法,还有就是可以设置下一个处理者对象。示例代码:public abstract class Handler { priv...原创 2018-06-20 00:38:40 · 300 阅读 · 0 评论 -
中介者模式
定义: 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。设计类图: 中介者模式中的角色:Mediator抽象中介者:定义同事类对象到中介者对象的接口,用于各个同事类之间的通信。ConcreteMediator具体中介者:实现了抽象中介者所声明的方法,知晓所有的具体同事类,负责协调各同事对象的交互...原创 2018-06-15 09:15:50 · 234 阅读 · 0 评论 -
建造者模式
定义: 将一个复杂产品对象的构建过程与它的表示分离开,从而使同样的创建过程可以创建出不同表示的产品对象。建造者模式又叫做生成器模式,可以定义通俗的理解为:封装一个产品的构建过程,并允许按步骤构造。设计类图: 建造者模式中的角色: ...原创 2018-06-08 09:49:51 · 255 阅读 · 0 评论 -
备忘录模式
定义: 在不破坏封装性的前提下,捕获对象的内部状态并将其在对象外部存储起来,这样就可以在之后需要的时候将对象恢复到之前保存的状态。备忘录模式又叫快照模式,其实就是一种数据备份的方法机制。 设计类图: 备忘录模式中的三个主要角色:Originator发起人角色:内部状态会发生变化的角色,负责内部创建备份数据和恢复数据状态。Memento备忘录角色: 负责存储发起人的内部...原创 2018-06-22 08:47:40 · 727 阅读 · 0 评论