目录

行为型:空对象模式

释义

空对象模式,用返回“空对象”而不是“判空”来应对“空”的情况。

/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E7%A9%BA%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F/%E8%A1%8C%E4%B8%BA%E5%9E%8B%EF%BC%9A%E7%A9%BA%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F.resources/A7E08E37-D0E9-47A9-8C02-6289DAD72C76.png
空对象模式
工厂类SubjectFactory能够创建Subject,如果要求创建的对象的tag在工厂类的tags中,则创建实际对象RealSubject,否则创建空对象NullSubject

抽象对象

1
2
3
4
5
abstract class AbstractSubject (
    var tag: String?
) {
    abstract fun isNull(): Boolean
}

实际对象

1
2
3
4
5
6
7
class RealSubject (
    var tag: String
): AbstractSubject(tag) {
    override fun isNull(): Boolean {
        return false
    }
}

空对象

1
2
3
4
5
class NullSubject: AbstractSubject("The Subject is null") {
    override fun isNull(): Boolean {
        return true
    }
}

工厂类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class SubjectFactory(
    val tags: MutableList<String> = mutableListOf()
) {
    fun getSubject(tag: String) {
        for(item in tags) {
            if(tag == item) {
                return object : RealSubject(tag)
            }
        }
        return object : NullSubject()
    }
}

使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
fun main() {
    // 构造工厂类
    val tags = mutableListOf("tag1","tag2","tag3")
    val subjectFactory: SubjectFactory = SubjectFactory(tags)
    
    // 从工厂类中获取对象
    // subject1、subject2、subject3拿到RealSubject
    val subject1 = subjectFactory.getSubject("tag1")
    val subject2 = subjectFactory.getSubject("tag2")
    val subject3 = subjectFactory.getSubject("tag3")
    // subject4拿到NullSubject
    val subject4 = subjectFactory.getSubject("tag4")
}