📅  最后修改于: 2023-12-03 14:56:37.299000             🧑  作者: Mango
空对象设计模式(Null Object Design Pattern)是一种设计模式,它可以在缺少对象时提供默认的行为或协作。它指定在缺少有效对象时使用一个空对象代替实际对象。空对象模式是一种优雅的方式来处理空值,并消除条件检查。
空对象模式需要实现以下几个要点:
interface Animal {
fun makeSound()
}
class NullAnimal : Animal {
override fun makeSound() {
// 空的实现
}
}
class Dog : Animal {
override fun makeSound() {
println("wang wang")
}
}
class Cat : Animal {
override fun makeSound() {
println("miao miao")
}
}
fun getAnimal(name: String?): Animal {
if (name == null) {
return NullAnimal()
}
return when (name) {
"dog" -> Dog()
"cat" -> Cat()
else -> NullAnimal()
}
}
fun main() {
val animal1 = getAnimal("dog")
animal1.makeSound() // 输出:wang wang
val animal2 = getAnimal(null)
animal2.makeSound() // 不输出任何内容
val animal3 = getAnimal("lion")
animal3.makeSound() // 不输出任何内容
}
在上面的示例中,我们创建了一个动物接口,并实现了狗和猫的具体类。我们还实现了一个空对象类NullAnimal,当客户端代码传递null时,它就会返回NullAnimal实例。
我们在getAnimal函数中使用空对象模式。当参数传递为null或找不到对应的动物时,就返回空对象实例。
在main函数中,我们使用getAnimal函数创建三个实例,并调用它们的makeSound方法。第一个实例是狗,它的makeSound方法输出“wang wang”。第二个实例是空对象,makeSound不会输出任何内容。第三个实例是找不到的动物,同样不会输出任何内容。
空对象模式通常适用于以下情况:
空对象模式有以下优点: