欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式系列 - 空对象模式

程序员文章站 2022-05-18 22:32:34
空对象模式取代简单的 NULL 值判断,将空值检查作为一种不做任何事情的行为。 介绍 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。 类图描述 代码实现 1、定义抽象类 2、定义实体类 ......

空对象模式取代简单的 null 值判断,将空值检查作为一种不做任何事情的行为。

介绍

在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方。

类图描述

设计模式系列 - 空对象模式

代码实现

1、定义抽象类

    public abstract class abstractcustomer
    {
        protected string name;
        public abstract bool isnil();
        public abstract string getname();
    }

2、定义实体类

public class nullcustomer : abstractcustomer
{
    public override string getname()
    {
        return "not available in customer database";
    }

    public override bool isnil()
    {
        return true;
    }
}

public class realcustomer : abstractcustomer
{
    public realcustomer(string name)
    {
        name = name;
    }
    public override string getname()
    {
        return this.name;
    }

    public override bool isnil()
    {
        return false;
    }
}

3、定义工厂类

public class customerfactory
{
    public static readonly string[] names = { "rob", "joe", "julie" };

    public static abstractcustomer getcustomer(string name)
    {
        for (int i = 0; i < names.length; i++)
        {
            if (names[i] == name)
                return new realcustomer(names[i]);
        }
        return new nullcustomer();
    }
}

4、上层调用

class program
{
    static void main(string[] args)
    {
        abstractcustomer customer1 = customerfactory.getcustomer("rob");
        abstractcustomer customer2 = customerfactory.getcustomer("bob");
        abstractcustomer customer3 = customerfactory.getcustomer("julie");
        abstractcustomer customer4 = customerfactory.getcustomer("laura");
        console.writeline("customers");
        console.writeline(customer1.getname());
        console.writeline(customer2.getname());
        console.writeline(customer3.getname());
        console.writeline(customer4.getname());

        console.readkey();
    }
}

总结