posts - 124,  comments - 29,  trackbacks - 0
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 成员
17    }

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

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


posted on 2008-06-24 11:00 天书 阅读(832) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(5)

随笔档案

文章分类

文章档案

好友的Bolg

搜索

  •  

最新评论

阅读排行榜

评论排行榜