设计模式之工厂方法模式

示例代码

下面定义一个抽象类,这个类中有一个具体方法(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)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值