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

空对象模式取代简单的 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();
    }
}

总结

原文地址:https://www.cnblogs.com/hippieZhou/p/10127115.html

时间: 2024-07-31 04:20:49

设计模式系列 - 空对象模式的相关文章

C# 设计模式之空对象模式

最近看了不少的书籍和视频等相关资料,决定自己边学习边写一下个人对设计模式的理解,如果有不对的请大家多多指正. 今天先说说我个人觉得最简单的设计模式 -- [空对象模式] 空对象模式可以减少客户端对对象判断是否为空的重复操作,也可以减少异常发生的情况[如果客户端调用程序忘记了检查对象是否为空,而直接访问对象中的数据,则有可能会报出异常,影响程序运行]. 废话不说了,先上我写的代码,下面是未运用空对象模式之前的示例代码: 要返回的实体代码,Person.cs: namespace NullObjec

【设计模式】空对象模式

在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查.Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可以在数据不可用的时候提供默认的行为. 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的地方. 实现 我们将创建一个定义操作(在这里,是客户的名称)的 AbstractCustomer 抽象类,和扩展了 Abs

设计模式之空对象模式(php实现)

github地址:https://github.com/ZQCard/design_pattern /** * 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查. * Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可以在数据不可用的时候提供默认的行为. * 在空对象模式中,我们创建一个指定各种要执行的操作的抽象类和扩展该类的实体类,还创建一个未对该类做任何实现的空对象类,该空对象类将无缝地使用在需要检查空值的

设计模式之空对象模式

空对象模式 空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法. 举个简单的例子, 一个听动物叫声的模拟程序: 动物代码: 听叫声的人: 现在我们想, 能不能把 animal 的空值判断去掉呢?我们增加一个 NullAnimal 类: 增加了NullAnimal类后, 在Person类中就不需要"animal != null"这句话了, 因为我们提供了一个实现接口的所有方法, 不会再产生null对象.

被遗忘的设计模式——空对象模式(Null Object Pattern)

GoF(四人帮)那本<设计模式 可复用面向对象软件的基础>可谓是设计模式方面的经典之作,其中介绍的23种设计模式, 也可谓是经典中的经典.但是,设计模式的种类绝不仅仅是这23种,除此之外还有很多巧妙可爱的设计模式值得我们学习.这些 被遗忘的设计模式,也可以堪称经典之作.今天我们来一起学习被遗忘的设计模式--空对象模式(Null Object Pattern). 一起看看这个模式会带给我们怎样的惊喜? 一.Pattern name Provide an object as a surrogate

Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式

前言 在上一篇中我们学习了行为型模式的备忘录模式(Memento Pattern)和状态模式(Memento Pattern).本篇则来学习下行为型模式的最后两个模式,观察者模式(Observer Pattern)和空对象模式模式(NullObject Pattern). 观察者模式 简介 观察者模式又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式.观察者模式定义

空对象模式

在学习Head First设计模式中的“命令模式”过程中,偶然发现可以用在coding过程中的小技巧.赶紧记录,以备后用! 具体可以称之为“空对象”模式,而且专门用来处理对象为null的情形. 比如以下情形: Command接口: public interface Command { public void execute(); } 测试代码: Command[] commands = new Command[10]; // initial commands[0] and the others

空对象模式(Null Object Pattern)

空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract class Duck { public String name; public abstract void getName(); } public class ConcreteDuck extends Duck { public ConcreteDuck(String name) { this.na

空对象模式和扩展方法的NULL验证

using System;using System.Collections.Generic;using System.Linq;using System.Text;//空对象模式和扩展方法的NULL验证namespace Chap2_3{ public class NULLObject { public void Test() { Promation promation = PromationFactory.Create("水果促销"); Promation promation1 =