• 设计模式》工厂Factory


    简单工厂

    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;
                    }
                }
            }
        }
    
  • 相关阅读:
    Windows server 2008 R2远程桌面授权破解方法
    微软 windows server 2019 中文版 原版iso镜像下载地址及密钥
    Everything——支持快速搜索文件夹
    相对路径(根目录、当前目录、上级目录)
    LinkShellExtension (软连接、硬连接、符号连接)工具教程
    oracle 获取表信息
    python3.6 安装 pycrypto
    项目问题记录
    Django得缓存
    Django得信号
  • 原文地址:https://www.cnblogs.com/icxldd/p/15796066.html
Copyright © 2020-2023  润新知