抽象工厂模式及范例

抽象工厂模式及范例
Abstract Factory 模式:关键特征
意图:为特定(不同)的客户提供特定(不同)系列的对象
             比如Vista风格的桌面,Window标准的桌面(其中包括图标的样式,菜单栏,任务栏等)
问题:一系列相关或相互依赖的对象需要被实例化

解决方案:
             先定义一个抽象工厂类来选择工厂类(可以根据配置文件选取)
 1      class  AbstractFactory
 2      {
 3        private string FactoryType = null;
 4        System.Configuration.AppSettingsReader asr = new System.Configuration.AppSettingsReader();
 5        public IFactory GetFactory()
 6        {
 7            FactoryType = (string)asr.GetValue("FactoryName"typeof(string));
 8            switch(FactoryType)
 9            {
10                case "ChineseFactory":
11                    return new ChineseFactory();
12                    break;
13                case "AmericanFactory":
14                    return new AmericanFactory();
15                    break;
16                default:
17                    return new ChineseFactory();
18            }

19            
20        }

21    }

           各个工厂类里创建不同系列的对象(同一工厂类里的对象风格相同),但他们有一个共同的接口或父类
 1      interface  IFactory
 2      {
 3        Service CreateService();
 4    }

 5
 6      class  ChineseFactory : IFactory
 7      {
 8
 9        IFactory 成员#region IFactory 成员
10
11        Service IFactory.CreateService()
12        {
13            return new ChineseService();
14        }

15
16        #endregion

17    }

18      class  AmericanFactory : IFactory
19      {
20        IFactory 成员#region IFactory 成员
21
22        Service IFactory.CreateService()
23        {
24            return new AmericanService();
25        }

26
27        #endregion

28    }
 最后在客户端Service se = (new AbstractFactory()).GetFactory().CreateService(); ,提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。每次在中国和美国的工资体制上切换时可以通过更改配置文件来切换。这样就避免了源代码保密的情况下无法更改业务规则的弊端。

配置文件如下
<? xml version = " 1.0 "  encoding = " utf-8 "   ?>
< configuration >
  
< appSettings >
    
< add key  = " FactoryName "  value = " ChineseFactory " />
  
</ appSettings >
</ configuration >


你可能感兴趣的:(抽象工厂模式及范例)