创建型设计模式之工厂模式
工厂模式
- 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。
- 比如对于一个复杂对象,内部同时包含很多子对象,这些子对象是构造函数的外部参数。
- 一种做法是由调用者首先创建这些子对象,之后再创建这个对象;
- 另一种做法是设计一个第三方(工厂),由工厂完成子对象和复杂对象的创建过程,之后再将复杂对象返回给调用者。
- 这样调用者就不需要再关注对象的创建过程,实现了调用者与复杂对象之间的解耦。
具体实现:
- 定义一个产品接口类(也可以是一个抽象类),这个接口提供了产品的规范;
- 定义产品实现类,继承产品接口,实现产品规范,不同的产品定义不同的实现类;
- 定义一个工厂接口(也可以是一个抽象类),这个接口是调用者的入口点;
- 定义实现工厂接口的实现类,每个产品类都有一个对应的工厂类完成产品的实例化工作,是实现不同类型产品实例化的场所。
该内容来自
《软件工程导论》
C#语言实现:
using System;
namespace FactoryPattern
{
#region 产品的实现
public interface IProduct {
void ProductMethod();
}
public class Product1 : IProduct {
public void ProductMethod() {
Console.WriteLine("我是产品一");
}
}
public class Product2 : IProduct {
public void ProductMethod() {
Console.WriteLine("我是产品二");
}
}
#endregion
#region 工厂的实现
public interface IFactory {
IProduct CreateProduct();
}
public class Factory1 : IFactory {
public IProduct CreateProduct() {
return new Product1();
}
}
public class Factory2 : IFactory {
public IProduct CreateProduct() {
return new Product2();
}
}
#endregion
class Program
{
static void Main(string[] args)
{
IFactory factory = new Factory1();
IProduct product = factory.CreateProduct();
product.ProductMethod();
factory = new Factory2();
product = factory.CreateProduct();
product.ProductMethod();
}
}
}