第3章 抽象工厂模式(Abstract Factory)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换。 看下面的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

原文 第3章 抽象工厂模式(Abstract Factory)

场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换。

看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
     interface  ISqlServer
     {
         //数据库添加操作
         public  void  Add();
     }
     interface  IOracle
     {
         //数据库添加操作
         public  void  Add();
 
     }
     
      class  SqlServer : ISqlServer
     {
         public  void  Add()
         {
             Console.WriteLine( "SqlServer添加操作" );
         }
     }
     class  Oracle : IOracle
     {
         public  void  Add()
         {
             Console.WriteLine( "Oracle添加操作" );
         }
     }
     
     
     
      class  SqlServerFactory : AbstractFactory
     {
         public  ISqlServer GetSqlServer()
         {
             return  new  SqlServer();
         }
 
     }
     class  OracleFactory : AbstractFactory
     {
 
         public  IOracle GetOracle()
         {
             return  new  Oracle();
         }
     }
     
     
     
     interface  AbstractFactory
     {
       public    ISqlServer GetSqlServer();
       public    IOracle GetOracle();
 
     }
     
      static  void  Main( string [] args)
         {
             //调用的场景
             AbstractFactory sqlServer =  new  SqlServerFactory();
             sqlServer.GetSqlServer().Add();
             AbstractFactory oracleServer =  new  OracleFactory();
             sqlServer.GetOracle().Add();
 
         }

这样调用还是觉得有点麻烦,我们可以用反射来实例化对象。 我们在来完善一下AbstractFactory。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   public    abstract  AbstractFactory
     {
         public  static  AbstractFactory GetInstance()
         {
             string  factoryName = System.Configuration.ConfigurationManager.AppSettings[ "factoryName" ];
 
             AbstractFactory instance;
 
             if  (factoryName !=  "" )
                 instance = (AbstractFactory)Assembly.Load(factoryName).CreateInstance(factoryName);
             else
                 instance =  null ;
 
 
             return  instance;
         }
         public  abstract  ISqlServer GetSqlServer();
         public  abstract  IOracle GetOracle();
 
     }
     
     //调用
       static  void  Main( string [] args)
         {
    
             AbstractFactory.GetInstance().GetOracle().Add();
             AbstractFactory.GetInstance().GetSqlServer().Add();
         }
1
2
3
4
5
6
7
//配置config文件
<? xml  version = "1.0"  encoding = "utf-8"  ?>
< configuration >
     < appSettings >
         < add  key = "factoryName"  value = "SqlServerFactory" ></ add >
     </ appSettings >
</ configuration >

这样是不是感觉方便了很多 利用反射来进行自动实例化。

 

  设计模式系列文章入口:http://www.diyibk.com/post/39.html

目录
相关文章
带你读《2022技术人的百宝黑皮书》——CoHOZ: Contrastive Multimodal Prompt Tuning for Hierarchical Open-set Zero-shot Recognition(14)
带你读《2022技术人的百宝黑皮书》——CoHOZ: Contrastive Multimodal Prompt Tuning for Hierarchical Open-set Zero-shot Recognition(14)
188 0
|
机器学习/深度学习 Python
【Python 机器学习专栏】堆叠(Stacking)集成策略详解
【4月更文挑战第30天】堆叠(Stacking)是机器学习中的集成学习策略,通过多层模型组合提升预测性能。该方法包含基础学习器和元学习器两个阶段:基础学习器使用多种模型(如决策树、SVM、神经网络)学习并产生预测;元学习器则利用这些预测结果作为新特征进行学习,生成最终预测。在Python中实现堆叠集成,需划分数据集、训练基础模型、构建新训练集、训练元学习器。堆叠集成的优势在于提高性能和灵活性,但可能增加计算复杂度和过拟合风险。
1629 0
|
Java
java enum与int类型的转换
模板式应用: main() {     int iColor = 0;    test(Color.
2160 0
|
前端开发 算法
前端开发常用的方法封装
截取地址栏里携带的参数、时间转换工具、字符串的截取等......
140 0
|
JSON 编译器 Swift
Swift-进阶 06:反射Mirror & 错误处理
Swift-进阶 06:反射Mirror & 错误处理
346 0
Swift-进阶 06:反射Mirror & 错误处理
|
存储 前端开发 Java
分布式追踪系统zipkin介绍
分布式追踪系统zipkin介绍
645 0
|
JSON JavaScript 前端开发
JS的对象数组去重处理(二十)
JS的对象数组去重处理(二十)
265 0
JS的对象数组去重处理(二十)
|
Python
opestack keystone 深入
一、概述   keystone 有两个endpoint端口,一个35357,用于管理,只有admin_role可以使用。一个是5000, 用于业务; 二、keystone中的路由   解析url,然后获取后端调用的具体方法; 具体解析可参见: python route 详解     
1018 0
[桌面版] 在 Mockplus 2.1 (预览版)中使用母版
Mockplus 2.1 预览版新增母版功能,可以直接复用组件,减少重复设计。 首先可以看一个母版的使用演示: 下面详细介绍一下母版的相关操作: 1. 添加母版 在工作区中的任意组件上面点击右键,弹出右键菜单,选择 “设置为母版”即可添加一个母版组件。
940 0
|
Java 网络安全
Java log4j日志记录工具配置说明
    Java log4j日志记录工具配置说明 --- 以下是示例配置信息 --- log4j.rootLogger = debug, stdout, logfile log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.err log4j.app
1411 0