6、Factory Method模式
真相:Factory Method模式实际上是延缓对象的创建,而把创建延迟到工厂中,将模块与具体对象的依赖转换成抽象工厂和具体工厂的依赖。(即接口和抽象类的弱依赖关系)
在.NET Framework中 对此模式进行了改造。
例子:WebRequest对象的创建:子类:HttpWebRequest/FtpWebRequest
WebRequest webRequest =WebRequset.Create(“Http://www.baidu.com”);
对于上面的实现的情况,在增加子类是需要修改Create方法的代码。违背了对修改关闭、继承开启的原则。
运用工厂模式对每一个请求类型创建单独的工厂子类,转换为弱依赖关系。
彻底解耦的办法:
创建请求类型与工厂子类的映射类WebRequsetPrefixElement类
Internal class WebRequsetPrefixElement{
Public string Prefix;
Public IwebRequsetCreator Creator;
Public WebRequsetPrefixElement(String p, IwebRequsetCreatorc ){
This.Prefix=p;
Creator=c;
}
}
在初始化WebRequset对象时,加载(静态方法)此时已有的WebRequsetPrefixElement对象数组。
当增加子类时,调用子类注册方法Regist()将新的WebRequsetPrefixElement对象假如数组中。此时创建WebReqest对象时根据URL开头查找WebRequsetPrefixElement数组,得到相应的Creator并创建对应的工厂对象。