一、运用享元模式的类
package com.study.flyweight
object PhonePool {
//某互联网公司采购了一批华为手机用于测试
val huaWeiPhonePool: ArrayList<HuaWeiPhone> by lazy {
val tempPool = arrayListOf<HuaWeiPhone>()
for (i in 0..3) {
val random = (0..3).random()
tempPool.add(HuaWeiPhone("手机测试标签$i", random == i))
}
tempPool
}
/**
* 获取华为测试机;享元模式的运用,尽可能避免创建重复对象,提高对象利用率
*/
fun getHuaWeiPhone(): HuaWeiPhone {
huaWeiPhonePool.forEach {
//没有被使用
if (!it.isUse) {
return it
}
}
return HuaWeiPhone("新购手机")
}
}
二、主程序调用
package com.study.flyweight
/**
* 定义和类型
定义:提供了减少对象数量从而改善应用所需的对象结构的方式
运用共享技术有效地支持大量细粒度的对象
类型:结构型
适用场景
常常用于系统底层的开发,以便解决系统的性能问题
系统有大量相似对象,需要缓冲池的场景
优点
减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率
减少内存之外的其他资源占用
缺点
关注内外部状态,关注线程安全问题
使系统,程序的结构复杂化
*/
fun main() {
//工作人员需要使用华为手机时可以直接去取
val huaWeiPhone = PhonePool.getHuaWeiPhone()
println("手机标签名称::${
huaWeiPhone.phoneLabelName}")
}