class Program
{
static void Main(string[] args)
{
Factory factory = new Factory();
IAnimal animal = factory.Create("pig");
animal.Call();
Console.ReadKey();
}
}
public class Factory
{
public IAnimal Create(string Name)
{
if (Name == "pig")
{
return new Pig();
}
else if (Name == "dog")
{
return new Dog();
}
else
{
return new Pig();
}
}
}
public interface IAnimal
{
void Call();
}
public class Dog : IAnimal
{
public void Call()
{
Console.WriteLine("狗在叫........");
}
}
public class Pig : IAnimal
{
public void Call()
{
Console.WriteLine("猪在叫........");
}
}
三、理解简单工厂
1.静态工厂
在客户端中我们创建了工厂类的实例,使用该实例的Create方法,来返回所需要的接口对象。我们其实可以将工厂类
当作工具类进行使用,就是将Create方法定义成静态方法,直接通过Factory.Create()获取对象实例,最好也将该类的
构造函数设为私有,这样外部就无法实例化该工厂类。静态工厂就是这么来的。
2.如何选择合适的接口对象
工厂类是如何返回合适的接口对象的呢?一般常用的有两种方式,第一种就是从客户端获取参数,通过对参数的判断
来选择接口实例,上述的代码示例就是采用此方法,第二种是通过获取配置文件中的值,来选择接口实例。
3.工厂模式的优点
简单工厂模式帮助我们实现了组件的封装,可以让外部实现面向接口编程。
简单工厂模式实现了客户端与具体实现类的解耦。客户端只需知道工厂和接口就可以了。
4.工厂模式的缺点
增加的客户端的复杂度,如果客户端是通过参数获取接口对象的,那么客户端就要理解参数所代表的具体功能。
系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。
5.何时选用工厂模式