示例代码
下面定义一个抽象类,这个类中有一个具体方法(MyMethod)和一个抽象方法(AbstractMethod),具体方法调用了抽象方法。
public abstract class AbstractClass
{
public void MyMethod()
{
string str = AbstractMethod();
Console.WriteLine(str);
}
protected abstract string AbstractMethod();
}
具体方法调用了抽象方法,并且,抽象方法需要在子类中实现,所以,子类实现的抽象方法会对父类中的具体方法产生影响。下面定义两个子类
public class Class1 : AbstractClass
{
protected override string AbstractMethod()
{
return "I am class1";
}
}
public class Class2 : AbstractClass
{
protected override string AbstractMethod()
{
return "I am class2";
}
}
在上面的代码中,子类实现的AbstractMethod方法的返回值,直接决定了父类中MyMethod方法中的输出。下面是场景类
class Program
{
static void Main(string[] args)
{
AbstractClass class1 = new Class1();
AbstractClass class2 = new Class2();
class1.MyMethod();
class2.MyMethod();
}
}
输出结果为:
I am class1
I am class2
模式解读
在工厂方法模式中,抽象的父类有一个经常变化的方法,被声明为抽象方法,这个抽象方法要在子类中实现,也就意味着,在一组具有某些共同特征的类中,相同的代码写在父类中,而不同的代码分别写在了各个具体子类的工厂方法中。
定义
百度百科是这么定义工厂方法模式的:
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。