为了账号安全,请及时绑定邮箱和手机立即绑定

工厂方法模式的疑问

工厂方法模式的疑问

holdtom 2018-12-06 20:19:00
参考链接: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 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

谢谢,不是很理解,能 来个具体的例子吗
查看完整回答
反对 回复 2018-12-09
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

@Qlin: 用反射的话,用配置文件就行可以了不用修改原来的代码,开闭原则,对扩展开放,对修改封闭!
查看完整回答
反对 回复 2018-12-09
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

对修改“封闭”到底指的什么呢?是绝对不修改任何代码吗?还是只不用修改客户端的调用代码? 谢谢。
查看完整回答
反对 回复 2018-12-09
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

其实就是开闭原则,对扩展开放,对修改封闭! 使用设计模式也是有代价的,就像在你的代码里,如果用工厂模式反会让代码更多,让人感觉“复杂”。。。 但这样的好处是结构清晰,维护方便,一般的小项目压根用不上什么设计模式,只有项目足够大,足够复杂,并且后期会不断完善持续开发,才能体现出设计模式的优势!
查看完整回答
反对 回复 2018-12-09
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

设计模式就的主要目的是方便扩展 如果你的程序只有几百行,而且服务的客户只有一家,业务逻辑也很少发生变化,那不用也没关系
查看完整回答
反对 回复 2018-12-09
?
GCT1015

TA贡献1827条经验 获得超4个赞

谢谢 去看看
查看完整回答
反对 回复 2018-12-09
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

@chenping2008:  谢谢, 有道理
查看完整回答
反对 回复 2018-12-09
?
温温酱

TA贡献1752条经验 获得超4个赞

new log 和 new 工厂 不是一样吗? 是说 反射 ?
查看完整回答
反对 回复 2018-12-09
?
心有法竹

TA贡献1866条经验 获得超5个赞

工厂模式的存在就是要释放new的存在
查看完整回答
反对 回复 2018-12-09
?
慕森王

TA贡献1777条经验 获得超3个赞

你去了解一下设计模式的,工厂模式你就清楚了 也不是说多此一举,要根据项目的实际情况来运用
查看完整回答
反对 回复 2018-12-09
?
LEATH

TA贡献1936条经验 获得超6个赞

工厂模式同样遵循开放封闭原则和高内聚低耦合,一般情况下尽可能在工厂模式不要修改,删除,而是添加功能,这就是所谓扩展性。而好处就在于业务逻辑你在工厂实现,ui层代码不管怎么实现,只是调用这个(接口)“黑匣子”。只需要对工厂处理,就是低耦合了。还有一个显著特点就是移植性强。工厂模式做好了,只需改变ui代码,在web,窗体,控制台,甚至net向java移植都会方便好多。
查看完整回答
反对 回复 2018-12-09
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

谢谢! 有很多 开源项目也用到 工厂方法模式,工厂的逻辑简单,就是创建一个 对象。如果Log里的逻辑变了,子类Log也都的变。 配置文件也可以配置 子类Log。 还是 不太明白 为什么这样做。
查看完整回答
反对 回复 2018-12-09
?
九州编程

TA贡献1785条经验 获得超4个赞

单纯的调用下new确实还不如用反射+配置文件,但如果里面还有些逻辑,是不是就得用工厂方法了?这里面的逻辑现在没有,或许将来就有了,这不就利于扩展了。
查看完整回答
反对 回复 2018-12-09
?
富国沪深

TA贡献1790条经验 获得超9个赞

@Rich.T:  配置一个 具体的子工厂 和 配置一个具体的Log,有什么区别? 一样可以通过反射,请解释一下,谢谢!
查看完整回答
反对 回复 2018-12-09
?
守候你守候我

TA贡献1802条经验 获得超10个赞

@Qlin:  问题就在这里,你现在是简单工厂, 定义一些配置的话,主方法那里通过接收参数进行调用
查看完整回答
反对 回复 2018-12-09
?
慕村225694

TA贡献1880条经验 获得超4个赞

@Rich.T:  1.扩展的话,如果不用工厂,直接扩展一个子类 File1Log,如果使用工厂,而要 多扩展一个  File1LogFactory。 2.Main方法,如果 改了调用方式,也要改成另一个 子工厂。如果不用工厂,要改另一个调用方式,也是改这里,改成new 另一个log。 没看出扩展 哪里方便? 指点一下,谢谢!
查看完整回答
反对 回复 2018-12-09
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

@Qlin:  你上面的这个工厂模式,还没有很大的用处 工厂最大的优势是扩展方便,不需要动主方法,只需要增加扩展类
查看完整回答
反对 回复 2018-12-09
  • 25 回答
  • 0 关注
  • 802 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信