CSharp: null object Pattern in donet 6
/// <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 geovinduProcessId = new Guid("2b8ba9a3-4f83-4f86-96a8-94daf79fa4bd");
_installedApplications = new Dictionary<Guid, Application>
{
{ gmailProcessId, new Gmail(gmailProcessId) },
{ subwaySurfersProcessId, new SubwaySurfers(subwaySurfersProcessId) },
{ geovinduProcessId, 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 已经关闭.





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


哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号