工厂方法模式

简单工厂模式的最大长处在于工厂类中包括了必要的逻辑推断。依据client的钻则条件动态实例化相关的类。对于client来说,去除了与详细产品的依赖。


工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。工厂方法模式实现时。client须要决定实例化哪一个工厂来实现运算类,选择推断的问题还是存在的,也就是说,工厂方法把简单的内部逻辑推断转移到了client代码来进行,假设加入功能。本来须要改动工厂类,而如今改动的是client。

 class Namer
    {
        public string fName, lName;

        public void GetLName()
        {
            Console.WriteLine(lName);
        }

        public void GetFName()
        {
            Console.WriteLine(fName);
        }
    }
    class FirstName : Namer
    {
        public FirstName(string name)
        {
            int i = name.Trim().IndexOf(",");
            if (i > 0)
            {
                fName = name.Substring(0, i).Trim();
                lName = name.Substring(i + 1).Trim();
            }
            else
            {
                lName = name;
                fName = "";
            }
        }
    }
    public LastName(string name)
        {
            int i = name.Trim().IndexOf(",");
            if (i > 0)
            {
                lName = name.Substring(0, i);
                fName = name.Substring(i + 1).Trim();
            }
            else
            {
                lName = name;
                fName = "";
            }
        }
    }
     interface INameFactory
    {
        Namer CreatName(string _name);
    }
    class FirstNameFactory : INameFactory
    {
        public Namer CreatName(string _name)
        {
            return new FirstName(_name);
        }
    }
    class LastNameFactory : INameFactory
    {
        public Namer CreatName(string _name)
        {
            return new LastName(_name);
        }
    }
     class Program
    {
        static void Main(string[] args)
        {
            INameFactory inf = new FirstNameFactory();
            Namer nm = inf.CreatName("Hello,world");
            nm.GetFName();
            nm.GetLName();
        }
    }

在下列情况下,应该考虑使用工厂方法:
一个类无法预測他要创建的对象属于哪一个类
一个类用它的子类来指定创建对象
要把创建哪一个类的信息局部化的时候

原文地址:https://www.cnblogs.com/gccbuaa/p/7243087.html