/// <summary>
    /// 空对象模式 null object Pattern
    /// 
    /// </summary>
    public abstract class Application
    {

        /// <summary>
        /// 
        /// </summary>
        private static readonly NullApplication NullApplication = new NullApplication();
        /// <summary>
        /// 
        /// </summary>
        /// <param name="processId"></param>
        public Application(Guid processId)
        {
            ProcessId = processId;
        }
        /// <summary>
        /// 
        /// </summary>
        public static NullApplication Default
        {
            get
            {
                return NullApplication;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public abstract string Name { get; }
        /// <summary>
        /// 
        /// </summary>
        public Guid ProcessId { get; }
        /// <summary>
        /// 
        /// </summary>
        public virtual void Open()
        {
            Console.WriteLine($"应用程序 {Name} 已经打开.");
        }
        /// <summary>
        /// 
        /// </summary>
        public virtual void Close()
        {
            Console.WriteLine($"应用程序 {Name} 已经关闭.");
        }
    }



    /// <summary>
    /// 空对象模式 null object Pattern
    /// </summary>
    public class NullApplication : Application
    {

        /// <summary>
        /// 
        /// </summary>
        public NullApplication()
            : base(Guid.Empty)
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public override string Name => string.Empty;
        /// <summary>
        /// 
        /// </summary>
        public override void Open()
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public override void Close()
        {
        }
    }


    /// <summary>
    /// 
    /// </summary>
    public class Gmail : Application
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="processId"></param>
        public Gmail(Guid processId)
            : base(processId)
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public override string Name => "Gmail";
    }

   /// <summary>
    /// 
    /// </summary>
    public class SubwaySurfers : Application
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="processId"></param>
        public SubwaySurfers(Guid processId)
            : base(processId)
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public override string Name => "Subway Surfers";
    }

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Geovin.Du.DuNullObject.Applications.Common;


namespace Geovin.Du.DuNullObject.Applications
{

    /// <summary>
    /// 
    /// </summary>
    public class GeovinDu : Application
    {

        /// <summary>
        /// 
        /// </summary>
        /// <param name="processId"></param>
        public GeovinDu(Guid processId)
            : base(processId)
        {
        }
        /// <summary>
        /// 
        /// </summary>
        public override string Name => "GeovinDu";
    }
}

   /// <summary>
    /// 
    /// </summary>
    public class ApplicationRepository
    {

        /// <summary>
        /// 
        /// </summary>
        private readonly Dictionary<Guid, Application> _installedApplications;


        /// <summary>
        /// 
        /// </summary>
        public ApplicationRepository()
        {
            var gmailProcessId = new Guid("6a3852ab-0973-4d1b-82d8-edd131c5f0a9");
            var subwaySurfersProcessId = new Guid("c8bc60c6-f1d2-484f-91ee-a6e6dec9e782");
            var youtubeProcessId = new Guid("2b8ba9a3-4f83-4f86-96a8-94daf79fa4bd");

            _installedApplications = new Dictionary<Guid, Application>
            {
                { gmailProcessId, new Gmail(gmailProcessId) },
                { subwaySurfersProcessId, new SubwaySurfers(subwaySurfersProcessId) },
                { youtubeProcessId, new GeovinDu(youtubeProcessId) },
            };
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="processId"></param>
        /// <returns></returns>
        public Application Find(Guid processId)
        {
            if (_installedApplications.TryGetValue(processId, out Application application))
            {
                return application;
            }

            return Application.Default;
        }
    }

    /// <summary>
    /// 空对象模式 null object Pattern
    /// geovindu,Geovin Du,涂聚文
    /// </summary>
    public static class SmartphoneApplicationExecutor
    {

        /// <summary>
        /// 
        /// </summary>
        public static void Execute()
        {

            ConsoleExtension.WriteSeparator("小手机应用程序 Demo");

            var applicationRepository = new ApplicationRepository();

            var validProcessId = new Guid("6a3852ab-0973-4d1b-82d8-edd131c5f0a9");
            var invalidProcessId = Guid.Empty;

            var gmail = applicationRepository.Find(validProcessId);
            gmail.Open();
            gmail.Close();

            // Null exception won't be thrown if an application with the specified process ID can't be found.
            // In that case, default (NULL) object will be returned.
            var geovindu = applicationRepository.Find(invalidProcessId);
            geovindu.Open();
            geovindu.Close();
        }
    }

  

调用:

            Console.WriteLine("Hello, Geovin Du! 学习 .net 6 ");
            //Geovin.Du.DuEmail.EmailExecutor.Execute();
            //Geovin.Du.DuStock.StockExecutor.Execute();
            // Geovin.Du.DuShoppingCart.ShoppingCartExecutor.Execute();
            Geovin.Du.DuNullObject.SmartphoneApplicationExecutor.Execute();

  

输出:

Hello, Geovin Du! 学习 .net 6

小手机应用程序 Demo
--------------------------------------------------
应用程序 Gmail 已经打开.
应用程序 Gmail 已经关闭.

  

 

 

 

 

 

 

 

 

 

 

吾富有钱时,妇儿看我好。吾若脱衣裳,与吾叠袍袄。吾出经求去,送吾即上道。将钱入舍来,见吾满面笑。绕吾白鸽旋,恰似鹦鹉鸟。邂逅暂时贫,看吾即貌哨。人有七贫时,七富还相报。图财不顾人,且看来时道。
–【唐】王梵志《吾富有钱时》

 

 

 

 

原文地址:http://www.cnblogs.com/geovindu/p/16859349.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性