DBProvider
public interface IDbProvider { /// <summary> /// 获取db客户端 /// </summary> /// <returns></returns> void PrintDbClient(); } public class MysqlDbProvider : IDbProvider { public void PrintDbClient() { Console.WriteLine("我是mysql 提供者"); } } public class PgsqlDbProvider : IDbProvider { public void PrintDbClient() { Console.WriteLine("我是Pgsql 提供者"); } } public class SqlserverDbProvider : IDbProvider { public void PrintDbClient() { Console.WriteLine("我是Sqlserver 提供者"); } } public enum DbType { Mysql = 1, Sqlserver = 2, Pgsql = 3 } public static class DbProviderFactory { public static IDbProvider CreateDbProvider(DbType dbType) { IDbProvider provider = null; switch (dbType) { case DbType.Mysql: provider = new MysqlDbProvider(); break; case DbType.Pgsql: provider = new PgsqlDbProvider(); break; case DbType.Sqlserver: provider = new SqlserverDbProvider(); break; default: break; } return provider; } }
发消息Provider。分别有email,sms,JiGuang Provider。
public interface IMessageProvider { void SendMessage(Guid userId, string message); } public abstract class AbsFactory { public abstract IMessageProvider CreateMessageProvider(); } public class EmailFactory : AbsFactory { public override IMessageProvider CreateMessageProvider() { return new EmailMessageProvider(); } } public class EmailMessageProvider : IMessageProvider { public void SendMessage(Guid userId, string message) { Console.WriteLine($"邮件发送: {userId.ToString()} : {message}"); } } public class JiGuangFactory : AbsFactory { public override IMessageProvider CreateMessageProvider() { return new JiGuangMessageProvider(); } } public class JiGuangMessageProvider : IMessageProvider { public void SendMessage(Guid userId, string message) { Console.WriteLine($"极光发送:{userId.ToString()}:{message}"); } } public class SmsFactory : AbsFactory { public override IMessageProvider CreateMessageProvider() { return new SmsMessageProvider(); } } public class SmsMessageProvider : IMessageProvider { public void SendMessage(Guid userId, string message) { Console.WriteLine($"短信发送: {userId.ToString()} : {message}"); } } public class FactoryMethodMessageProviderUnitTest : AbsUnitTest { public override void Test() { while (true) { Console.WriteLine("请输入1|2|3"); int type = Convert.ToInt32(Console.ReadLine()); Guid userId = Guid.NewGuid(); string message = "你好"; switch (type) { case 1: AbsFactory jiGuangFactory = new JiGuangFactory(); jiGuangFactory.CreateMessageProvider().SendMessage(userId, message); break; case 2: AbsFactory smsFactory = new SmsFactory(); smsFactory.CreateMessageProvider().SendMessage(userId, message); break; case 3: AbsFactory emailFactory = new EmailFactory(); emailFactory.CreateMessageProvider().SendMessage(userId, message); break; } } } }
分app,h5两个工厂(还可以增加微信小程序工厂去统计微信小程序的相关行为) 工厂提供行为:给用户发消息,统计当前平台的用户数据
public abstract class AbsPlatformProviderFactory { public abstract IStatCalculate CreateStatCalculateProvider(); public abstract IPushMessage CreatePushMessageProvider(); } public interface IStatCalculate { void CalcTodayData(); } public interface IPushMessage { void PushMessage(Guid userId); } public class AppStatCalculate : IStatCalculate { public void CalcTodayData() { Console.WriteLine($"App:统计今日数据完成"); } } public class AppPushMessage : IPushMessage { public void PushMessage(Guid userId) { Console.WriteLine("App:发送消息完成" + userId.ToString()); } } public class AppPlatformProviderFactory : AbsPlatformProviderFactory { public override IStatCalculate CreateStatCalculateProvider() { return new AppStatCalculate(); } public override IPushMessage CreatePushMessageProvider() { return new AppPushMessage(); } } public class H5PushMessage : IPushMessage { public void PushMessage(Guid userId) { Console.WriteLine("H5:发送消息完成" + userId.ToString()); } } public class H5StatCalculate : IStatCalculate { public void CalcTodayData() { Console.WriteLine($"H5:统计今日数据完成"); } } public class H5PlatformProviderFactory : AbsPlatformProviderFactory { public override IStatCalculate CreateStatCalculateProvider() { return new H5StatCalculate(); } public override IPushMessage CreatePushMessageProvider() { return new H5PushMessage(); } } public class AbsFactoryUnitTest : AbsUnitTest { public override void Test() { while (true) { Console.WriteLine("请输入1|2"); int type = Convert.ToInt32(Console.ReadLine()); Guid userId = Guid.NewGuid(); string message = "你好"; switch (type) { case 1: AbsPlatformProviderFactory h5PlatformProviderFactory = new H5PlatformProviderFactory(); h5PlatformProviderFactory.CreatePushMessageProvider().PushMessage(userId); h5PlatformProviderFactory.CreateStatCalculateProvider().CalcTodayData(); break; case 2: AbsPlatformProviderFactory appPlatformProviderFactory = new AppPlatformProviderFactory(); appPlatformProviderFactory.CreatePushMessageProvider().PushMessage(userId); appPlatformProviderFactory.CreateStatCalculateProvider().CalcTodayData(); break; } } } }