
/// <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(geovinduProcessId) },
};
}
/// <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 已经关闭.
