工厂方法模式的疑问
参考链接: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就行,何必用工厂。
各位 都说说,解释一下上面的工厂 或者说说 工厂有什么好处?
holdtom
浏览 803回答 25
25回答
-
慕森王
你去了解一下设计模式的,工厂模式你就清楚了
也不是说多此一举,要根据项目的实际情况来运用
-
ABOUTYOU
@Qlin:
你上面的这个工厂模式,还没有很大的用处
工厂最大的优势是扩展方便,不需要动主方法,只需要增加扩展类
-
慕村225694
@Rich.T:
1.扩展的话,如果不用工厂,直接扩展一个子类 File1Log,如果使用工厂,而要 多扩展一个 File1LogFactory。
2.Main方法,如果 改了调用方式,也要改成另一个 子工厂。如果不用工厂,要改另一个调用方式,也是改这里,改成new 另一个log。
没看出扩展 哪里方便? 指点一下,谢谢!
-
守候你守候我
@Qlin:
问题就在这里,你现在是简单工厂,
定义一些配置的话,主方法那里通过接收参数进行调用
-
富国沪深
@Rich.T:
配置一个 具体的子工厂 和 配置一个具体的Log,有什么区别? 一样可以通过反射,请解释一下,谢谢!
-
九州编程
单纯的调用下new确实还不如用反射+配置文件,但如果里面还有些逻辑,是不是就得用工厂方法了?这里面的逻辑现在没有,或许将来就有了,这不就利于扩展了。
-
回首忆惘然
谢谢!
有很多 开源项目也用到 工厂方法模式,工厂的逻辑简单,就是创建一个 对象。如果Log里的逻辑变了,子类Log也都的变。 配置文件也可以配置 子类Log。
还是 不太明白 为什么这样做。
-
LEATH
工厂模式同样遵循开放封闭原则和高内聚低耦合,一般情况下尽可能在工厂模式不要修改,删除,而是添加功能,这就是所谓扩展性。而好处就在于业务逻辑你在工厂实现,ui层代码不管怎么实现,只是调用这个(接口)“黑匣子”。只需要对工厂处理,就是低耦合了。还有一个显著特点就是移植性强。工厂模式做好了,只需改变ui代码,在web,窗体,控制台,甚至net向java移植都会方便好多。
-
慕姐8265434
谢谢,不是很理解,能 来个具体的例子吗
-
心有法竹
工厂模式的存在就是要释放new的存在
打开App,查看更多内容