📜  设计模式-空对象模式(1)

📅  最后修改于: 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() 是动物会发出声音的方法。CatAnimal 的子类,表示一只猫。NullAnimalAnimal 的子类,表示一个空对象。AnimalFactory 是工厂类,用于创建 Animal 对象。NullObjectPatternDemo 是测试代码,用于演示空对象模式的使用。

在测试代码中,我们创建了两个动物对象,一个是猫,另一个是空对象。对于猫对象,我们调用了 makeSound() 方法,会输出一段“喵喵!”的声音。对于空对象,由于它不执行任何任何实际的业务逻辑,所以对于它的调用不会有任何影响。

优点和缺点

优点:

  1. 代码结构清晰简洁,可读性高。
  2. 通过使用空对象,避免在程序中大量地检查 NULL 对象。
  3. 通过使用空对象,可以减少代码的重复量,避免代码的冗余和重复。
  4. 可以提高系统的可拓展性和可维护性,利于代码的维护和管理。

缺点:

  1. 对于某些需要返回 NULL 值的方法,实现空对象模式会导致该方法无法返回 NULL 值,需要在空对象中返回一个默认值。
  2. 如果需要对空对象进行特殊处理,则需要在空对象中添加对应的逻辑,会增加代码量。
总结

空对象模式是一种非常常用的设计模式,在代码中能够提高可读性和可维护性,减少代码的冗余和重复,使程序更加简洁易懂。在实际开发中,需要根据具体情况选择是否使用该模式。