📅  最后修改于: 2023-12-03 14:57:40.118000             🧑  作者: Mango
空对象模式(Null Object Pattern)是一种常用的软件设计模式,在这个模式中,一个空对象代替 NULL 对象实例的检查。空对象不执行任何实际的业务逻辑,而只是返回默认值或不产生任何效果。
当某个对象需要执行一些操作,但是操作前需要判断对象是否为空,如果为空就不执行操作,利用空对象模式可以将这个判断的逻辑放在空对象中,从而避免频繁的判断对象是否为空的操作,使代码更加简洁易懂。
下面是一个简单的示例代码,展示了如何使用空对象模式。
// 抽象类 - 动物
abstract class Animal {
protected String name;
public abstract void makeSound();
public String getName() {
return name;
}
}
// 实体类 - 猫
class Cat extends Animal {
public Cat(String name) {
this.name = name;
}
@Override
public void makeSound() {
System.out.println("喵喵!");
}
}
// 空对象类
class NullAnimal extends Animal {
public NullAnimal() {
this.name = "Unknown";
}
@Override
public void makeSound() {
// 空对象不执行任何逻辑
}
}
// 工厂类,用于创建动物对象
class AnimalFactory {
public static Animal createAnimal(String name) {
if (name.equals("Cat")) {
return new Cat(name);
} else {
return new NullAnimal();
}
}
}
// 测试代码
public class NullObjectPatternDemo {
public static void main(String[] args) {
Animal animal1 = AnimalFactory.createAnimal("Cat");
Animal animal2 = AnimalFactory.createAnimal("Dog");
System.out.println("Animal 1 Name: " + animal1.getName());
animal1.makeSound();
System.out.println("Animal 2 Name: " + animal2.getName());
animal2.makeSound();
}
}
上述代码中,Animal
表示动物类,其中 makeSound()
是动物会发出声音的方法。Cat
是 Animal
的子类,表示一只猫。NullAnimal
是 Animal
的子类,表示一个空对象。AnimalFactory
是工厂类,用于创建 Animal
对象。NullObjectPatternDemo
是测试代码,用于演示空对象模式的使用。
在测试代码中,我们创建了两个动物对象,一个是猫,另一个是空对象。对于猫对象,我们调用了 makeSound()
方法,会输出一段“喵喵!”的声音。对于空对象,由于它不执行任何任何实际的业务逻辑,所以对于它的调用不会有任何影响。
优点:
缺点:
空对象模式是一种非常常用的设计模式,在代码中能够提高可读性和可维护性,减少代码的冗余和重复,使程序更加简洁易懂。在实际开发中,需要根据具体情况选择是否使用该模式。