it编程 > App开发 > Android

Android常用设计模式速查一览表

44人参与 2026-09-05 Android

本文整理 android 开发中常见技术点对应的设计模式,并给出简化伪代码、典型源码/原理使用位置。伪代码用于理解模式结构,不等同于源码实现。

总览

设计模式android 常见技术点典型使用位置
单例模式全局管理器、系统服务、数据库实例workmanager.getinstance()room.databasebuilder() 后的数据库单例、systemserviceregistry
builder 模式复杂对象构建alertdialog.buildernotificationcompat.builderroom.databasebuilder()
工厂模式对象创建解耦layoutinflater.factory2fragmentfactoryviewmodelprovider.factory
观察者模式数据变化通知、生命周期感知livedata.observe()lifecycleobserverflow.collect
适配器模式数据和 ui 解耦recyclerview.adapterlistadaptercursoradapter
代理模式ipc、远程服务、本地接口代理binder 的 stub / proxy、aidl
装饰器模式包装并增强能力contextwrappercontextthemewrapperinputstream 包装链
外观模式简化复杂子系统访问contextcameraxglide.with()
模板方法模式固定流程中暴露可重写步骤activity 生命周期、view.draw()viewgroup.dispatchdraw()
策略模式可替换算法或行为recyclerview.layoutmanageritemanimatordiffutil.itemcallback
责任链模式事件分发、拦截链触摸事件分发、okhttp interceptor
状态模式对象行为随状态变化lifecycle.state、播放器状态、登录状态
命令模式把操作封装为对象runnable + handlerpendingintent、点击事件回调
mvc / mvp / mvvm应用架构分层activity/fragmentviewmodellivedata/stateflow、repository

1. 单例模式 singleton

使用场景

android 中的例子

伪代码

class appdatabase private constructor() {
    companion object {
        @volatile
        private var instance: appdatabase? = null

        fun getinstance(): appdatabase {
            return instance ?: synchronized(this) {
                instance ?: appdatabase().also { instance = it }
            }
        }
    }
}

源码 / 原理标注

2. builder 模式

使用场景

android 中的例子

伪代码

class dialog private constructor(
    val title: string?,
    val message: string?,
    val cancelable: boolean
) {
    class builder {
        private var title: string? = null
        private var message: string? = null
        private var cancelable: boolean = true

        fun settitle(value: string) = apply { title = value }
        fun setmessage(value: string) = apply { message = value }
        fun setcancelable(value: boolean) = apply { cancelable = value }

        fun build(): dialog {
            return dialog(title, message, cancelable)
        }
    }
}

源码 / 原理标注

3. 工厂模式 factory

使用场景

android 中的例子

伪代码

interface viewmodelfactory {
    fun <t : viewmodel> create(modelclass: class<t>): t
}

class userviewmodelfactory(
    private val repository: userrepository
) : viewmodelfactory {
    override fun <t : viewmodel> create(modelclass: class<t>): t {
        if (modelclass == userviewmodel::class.java) {
            return userviewmodel(repository) as t
        }
        error("unknown viewmodel")
    }
}

源码 / 原理标注

4. 观察者模式 observer

使用场景

android 中的例子

伪代码

class observabledata<t> {
    private val observers = mutablelistof<(t) -> unit>()
    private var value: t? = null

    fun observe(observer: (t) -> unit) {
        observers += observer
        value?.let(observer)
    }

    fun setvalue(newvalue: t) {
        value = newvalue
        observers.foreach { it(newvalue) }
    }
}

源码 / 原理标注

5. 适配器模式 adapter

使用场景

android 中的例子

伪代码

class useradapter(
    private val users: list<user>
) : recyclerview.adapter<userviewholder>() {

    override fun getitemcount(): int {
        return users.size
    }

    override fun oncreateviewholder(parent: viewgroup, viewtype: int): userviewholder {
        return userviewholder(parent.inflate("item_user"))
    }

    override fun onbindviewholder(holder: userviewholder, position: int) {
        holder.bind(users[position])
    }
}

源码 / 原理标注

6. 代理模式 proxy

使用场景

android 中的例子

伪代码

interface iuserservice {
    fun getusername(id: long): string
}

class userserviceproxy(
    private val remotebinder: binder
) : iuserservice {
    override fun getusername(id: long): string {
        val data = parcel.obtain()
        val reply = parcel.obtain()
        data.writelong(id)
        remotebinder.transact(code_get_user, data, reply, 0)
        return reply.readstring()
    }
}

源码 / 原理标注

7. 装饰器模式 decorator

使用场景

android 中的例子

伪代码

open class basecontext {
    open fun getthemename(): string = "default"
}

open class contextwrapper(
    private val base: basecontext
) : basecontext() {
    override fun getthemename(): string {
        return base.getthemename()
    }
}

class themecontextwrapper(
    base: basecontext,
    private val theme: string
) : contextwrapper(base) {
    override fun getthemename(): string {
        return theme
    }
}

源码 / 原理标注

8. 外观模式 facade

使用场景

android 中的例子

伪代码

class imageloaderfacade(
    private val cache: imagecache,
    private val network: imagenetwork,
    private val decoder: imagedecoder
) {
    fun load(url: string, imageview: imageview) {
        val bytes = cache.get(url) ?: network.download(url)
        val bitmap = decoder.decode(bytes)
        imageview.setimagebitmap(bitmap)
    }
}

源码 / 原理标注

9. 模板方法模式 template method

使用场景

android 中的例子

伪代码

abstract class baseactivity {
    fun performcreate() {
        attachbasecontext()
        oncreate()
        restorestate()
    }

    protected open fun attachbasecontext() {}
    protected abstract fun oncreate()
    protected open fun restorestate() {}
}

class mainactivity : baseactivity() {
    override fun oncreate() {
        setcontentview("activity_main")
    }
}

源码 / 原理标注

10. 策略模式 strategy

使用场景

android 中的例子

伪代码

interface sortstrategy {
    fun sort(items: list<item>): list<item>
}

class timesortstrategy : sortstrategy {
    override fun sort(items: list<item>) = items.sortedby { it.time }
}

class namesortstrategy : sortstrategy {
    override fun sort(items: list<item>) = items.sortedby { it.name }
}

class itemcontroller(
    private var strategy: sortstrategy
) {
    fun render(items: list<item>) {
        show(strategy.sort(items))
    }
}

源码 / 原理标注

11. 责任链模式 chain of responsibility

使用场景

android 中的例子

伪代码

abstract class eventnode {
    var next: eventnode? = null

    fun dispatch(event: motionevent): boolean {
        if (handle(event)) {
            return true
        }
        return next?.dispatch(event) ?: false
    }

    protected abstract fun handle(event: motionevent): boolean
}

源码 / 原理标注

12. 状态模式 state

使用场景

android 中的例子

伪代码

interface playerstate {
    fun play(player: player)
    fun pause(player: player)
}

class idlestate : playerstate {
    override fun play(player: player) {
        player.prepare()
        player.state = playingstate()
    }

    override fun pause(player: player) {
        // idle 状态下无需处理
    }
}

class playingstate : playerstate {
    override fun play(player: player) {}

    override fun pause(player: player) {
        player.pauseinternal()
        player.state = pausedstate()
    }
}

源码 / 原理标注

13. 命令模式 command

使用场景

android 中的例子

伪代码

interface command {
    fun execute()
}

class saveusercommand(
    private val repository: userrepository,
    private val user: user
) : command {
    override fun execute() {
        repository.save(user)
    }
}

class commandqueue {
    private val commands = arraydeque<command>()

    fun enqueue(command: command) {
        commands.addlast(command)
    }

    fun runnext() {
        commands.removefirstornull()?.execute()
    }
}

源码 / 原理标注

14. mvc / mvp / mvvm 架构模式

使用场景

android 中的例子

伪代码

class userviewmodel(
    private val repository: userrepository
) : viewmodel() {
    private val _uistate = mutablestateflow<useruistate>(useruistate.loading)
    val uistate: stateflow<useruistate> = _uistate

    fun loaduser(id: long) {
        viewmodelscope.launch {
            _uistate.value = useruistate.loading
            _uistate.value = runcatching {
                repository.getuser(id)
            }.fold(
                onsuccess = { useruistate.content(it) },
                onfailure = { useruistate.error(it.message.orempty()) }
            )
        }
    }
}

class userfragment : fragment() {
    private val viewmodel: userviewmodel by viewmodels()

    fun render() {
        collect(viewmodel.uistate) { state ->
            when (state) {
                is useruistate.loading -> showloading()
                is useruistate.content -> showuser(state.user)
                is useruistate.error -> showerror(state.message)
            }
        }
    }
}

源码 / 原理标注

15. 组合模式 composite

使用场景

android 中的例子

伪代码

abstract class uinode {
    abstract fun draw()
}

class textnode : uinode() {
    override fun draw() {
        drawtext()
    }
}

class containernode : uinode() {
    private val children = mutablelistof<uinode>()

    fun add(child: uinode) {
        children += child
    }

    override fun draw() {
        children.foreach { it.draw() }
    }
}

源码 / 原理标注

16. 享元模式 flyweight

使用场景

android 中的例子

伪代码

class bitmappool {
    private val cache = mutablemapof<string, bitmap>()

    fun get(key: string, loader: () -> bitmap): bitmap {
        return cache[key] ?: loader().also { bitmap ->
            cache[key] = bitmap
        }
    }
}

源码 / 原理标注

记忆方式

你在做什么常见模式
创建复杂对象builder
控制对象唯一singleton
把创建权交出去factory
数据变了通知 uiobserver
数据接到列表控件adapter
跨进程像本地调用proxy
包一层增强功能decorator
给复杂系统一个简单入口facade
框架定流程,业务填步骤template method
替换算法或行为strategy
请求一路传递chain of responsibility
不同状态不同行为state
操作排队或延迟执行command
树形 ui 统一处理composite
大量对象共享复用flyweight

学习建议

到此这篇关于android常用设计模式速查一览表的文章就介绍到这了,更多相关android常用设计模式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

Android多渠道打包与Gradle构建优化实战

09-06

Android ChipGroup 简介及使用说明

09-16

Android Compose 绘制原理全面总结

09-16

Android App启动速度优化完整流程(冷启动/热启动全链路实战)

07-31

Android普通网络和EAP网络的WiFi连接完整过程

07-28

Android系统应用蓝牙分享文件失败的分析解决方法

07-28

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论