/// <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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性