参考链接:http://terrylee.cnblogs.com/archive/2006/01/04/310716.html,大致如下:
public abstract class Log
{
public abstract void Write();
}
public class EventLog : Log
{
public override void Write()
{
Console.WriteLine("EventLog Write Success!");
}
}
public class FileLog : Log
{
public override void Write()
{
Console.WriteLine("FileLog Write Success!");
}
}
//工厂
public abstract class LogFactory
{
public abstract Log Create();
}
public class EventFactory : LogFactory
{
public override EventLog Create()
{
return new EventLog();
}
}
public class FileFactory : LogFactory
{
public override FileLog Create()
{
return new FileLog();
}
}
//调用
static void Main(string[] args)
{
LogFactory factory = new EventFactory();
Log log = factory.Create();
log.Write();
}
上面的调用代码,没有看出工厂方法的好处,如果 没有工厂,也是一样的调用如下:
static void Main(string[] args)
{
//LogFactory factory = new EventFactory();
Log log = new EventLog();
log.Write();
}
再 扩展一个Log的话,又要再写一个实现工厂,再通过实现工厂来创建,是不是多此一举,如果反射的话,直接在配置文件中配置相关log就行,何必用工厂。
各位 都说说,解释一下上面的工厂 或者说说 工厂有什么好处?
25 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
其实就是开闭原则,对扩展开放,对修改封闭!
使用设计模式也是有代价的,就像在你的代码里,如果用工厂模式反会让代码更多,让人感觉“复杂”。。。
但这样的好处是结构清晰,维护方便,一般的小项目压根用不上什么设计模式,只有项目足够大,足够复杂,并且后期会不断完善持续开发,才能体现出设计模式的优势!
LEATH
TA贡献1936条经验 获得超6个赞
工厂模式同样遵循开放封闭原则和高内聚低耦合,一般情况下尽可能在工厂模式不要修改,删除,而是添加功能,这就是所谓扩展性。而好处就在于业务逻辑你在工厂实现,ui层代码不管怎么实现,只是调用这个(接口)“黑匣子”。只需要对工厂处理,就是低耦合了。还有一个显著特点就是移植性强。工厂模式做好了,只需改变ui代码,在web,窗体,控制台,甚至net向java移植都会方便好多。
回首忆惘然
TA贡献1847条经验 获得超11个赞
谢谢!
有很多 开源项目也用到 工厂方法模式,工厂的逻辑简单,就是创建一个 对象。如果Log里的逻辑变了,子类Log也都的变。 配置文件也可以配置 子类Log。
还是 不太明白 为什么这样做。
慕村225694
TA贡献1880条经验 获得超4个赞
@Rich.T:
1.扩展的话,如果不用工厂,直接扩展一个子类 File1Log,如果使用工厂,而要 多扩展一个 File1LogFactory。
2.Main方法,如果 改了调用方式,也要改成另一个 子工厂。如果不用工厂,要改另一个调用方式,也是改这里,改成new 另一个log。
没看出扩展 哪里方便? 指点一下,谢谢!
- 25 回答
- 0 关注
- 802 浏览
添加回答
举报
0/150
提交
取消