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;
                    }
                }
            }
        }
    
  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/icxldd/p/15796066.html
Copyright © 2011-2022 走看看