简单工厂,代码:
public interface ISpeak{ public void Say();}public class Hello : ISpeak{ public void Say() { //throw new NotImplementedException(); Console.WriteLine("Hello"); }}public class Bye : ISpeak{ public void Say() { Console.WriteLine("Bye"); }}public class Factory{ public static ISpeak Creator(string type) { switch (type) { case "hellow": return new Hello(); case "bye": return new Bye(); default: return null; } }}
毕竟是简单工厂,思路相对简单,将实例的创建都放在一个地方,根据传入的参数不同,生成不同的对象给对方。
工厂方法:还是使用上面的打招呼类
public interface IFactory { public ISpeak Creator(); } public class HellowFactory : IFactory { public override ISpeak Creator() { return new Hello(); } } public class ByeFactory : IFactory { public override ISpeak Creator() { return new Bye(); } }
这里就要注意了,区别很容易就看得出来,简单工厂里提供了一个静态的方法,随时可以供提供者访问,而工厂方法则是将工厂类抽象了出来,给了一个接口,生成Hellow或者Bye需要通过对应的工厂来生产,这样如果加一个早上好就需要新创建一个工厂类了,似乎越来越麻烦了,但是实际我们在写程序的时候不可能是这么简单的,牵涉到不同需求时,如果需要用到上面的单例模式时,我们就可以把新的单例逻辑写在新的工厂类中。但工厂方法模式确实会造成过多的工厂类,所以可以考虑将简单工厂和工厂方法结合起来。也有很多人把这两个模式合成工厂方法模式,认为简单工厂是工厂方法的一种。