设计模式C#合集--工厂方法模式

简单工厂,代码:

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需要通过对应的工厂来生产,这样如果加一个早上好就需要新创建一个工厂类了,似乎越来越麻烦了,但是实际我们在写程序的时候不可能是这么简单的,牵涉到不同需求时,如果需要用到上面的单例模式时,我们就可以把新的单例逻辑写在新的工厂类中。但工厂方法模式确实会造成过多的工厂类,所以可以考虑将简单工厂和工厂方法结合起来。也有很多人把这两个模式合成工厂方法模式,认为简单工厂是工厂方法的一种。

posted on 2017-01-05 16:21  TIEDPAG  阅读(100)  评论(0编辑  收藏  举报

导航