zoukankan      html  css  js  c++  java
  • 设计模式》工厂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;
                    }
                }
            }
        }
    
  • 相关阅读:
    Linux部署之NFS方式安装系统
    VMware Workstation Pro学习探索(Linux,Docker)
    sqlserver最大内存设置太小导致无法启动sql服务
    Docker下安装Sqlserver(mssql)
    docker错误:net/http: TLS handshake timeout;解决方案
    Linux和Docker常用命令
    Linux及Docker学习记录
    .net core视图预编译
    oracle的一些简单语法
    Oracle安装连接常见错误
  • 原文地址:https://www.cnblogs.com/icxldd/p/15796066.html
Copyright © 2011-2022 走看看