设计模式 - 享元模式 Flyweight Pattern

一、概念

尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。当程序中存在大量相似对象,每个对象之间只是根据不同的使用场景有些许变化时。

|--------------------------|---------------------------|
| Flyweight 享元接口 | 定义所有对象共同的操作。 |
| Concrete Flyweight 具体享元类 | 具体的要被共享的对象,内部保存需要共享的内部状态。 |
| Flyweight 享元工厂 | 管理享元对象的创建和复用。 |

二、实现

2.1 享元接口

Kotlin 复制代码
interface IChess {
    fun move(column: Int, row: Int)
}

2.2 具体享元类

Kotlin 复制代码
enum class ChessColor {
    BLACK, WHITE
}

class Chess(
    val color: ChessColor
) : IChess {
    override fun move(column: Int, row: Int) = println("$color 棋子颜色走到了【行$column】【列$row】处")
}

2.3 享元工厂

Kotlin 复制代码
class ChessFactory {
    companion object {
        //用来存储已创建对象的容器
        private val chessContainer = mapOf<ChessColor, IChess>()
        //已有匹配对象则复用,未找到则创建新对象
        fun getChess(chessColor: ChessColor): IChess {
            return chessContainer[chessColor] ?: Chess(chessColor)
        }
    }
}

2.4 使用

Kotlin 复制代码
fun main() {
    ChessFactory.getChess(ChessColor.WHITE).move(3,2) //WHITE 棋子颜色走到了【行3】【列2】处
    ChessFactory.getChess(ChessColor.BLACK).move(5,4) //BLACK 棋子颜色走到了【行5】【列4】处
}
相关推荐
stevenzqzq4 小时前
DataStore基本使用教程
android
LawrenceMssss5 小时前
由于创建一个完整的App涉及到多个层面(如前端、后端、数据库等),并且每种语言通常有其特定的用途(如Java/Kotlin用于Android开发,Swift/Objective-C用于iOS开发,Py
android·java·ios
chen_mangoo6 小时前
HDMI简介
android·linux·驱动开发·单片机·嵌入式硬件
阿里-于怀6 小时前
AgentScope AutoContextMemory:告别 Agent 上下文焦虑
android·java·数据库·agentscope
sxlishaobin6 小时前
设计模式之模板方法模式
设计模式·模板方法模式
le1616166 小时前
设计模式之单例模式
单例模式·设计模式
Larry_Yanan6 小时前
Qt安卓开发(三)双摄像头内嵌布局
android·开发语言·c++·qt·ui
粲然忧生6 小时前
腾讯云终端性能监控SDK正式上线,为鸿蒙开发适配保驾护航
android·腾讯云·harmonyos
我命由我123456 小时前
Kotlin 开发 - Kotlin Lambda 表达式返回值
android·java·开发语言·java-ee·kotlin·android studio·android-studio
Knight_AL6 小时前
从单例模式说起:Java 常见设计模式的理解与实践
java·单例模式·设计模式