下面我们举个例子:现在我们有个A老师去上课。
可是这个时候A老师说我小孩突然生病了,我要去医院,但是这课总要有人去上的,不能让学生在那放鸭子啊,于是就跟B老师调或者C老师调课。从这可以看出, 不管是A,B,C三个老师,他们对我们来说都老师,不管谁给我们上课,对学生来说都是一样的,都能学习到知识,我们先建一个教师的基类:
public class Teacher
{
public virtual string TeachCourse()
{
return "Teacher";
}
}
在创建B老师,C老师,他们都继承老师的特性
public class EnglishTeacher:Teacher
{
public override string TeachCourse()
{
return "English_Teacher";
}
}
public class MathTeacher:Teacher
{
public override string TeachCourse()
{
return "Math_Teach";
}
}
现在的问题其实就是如何去实例化对象的问题,也就是说,到底要实例化谁,将来会不会增加实例化的对象这是很容易变化的地方,应该考虑用一个单独的类来做这 个创造实例的过程,这就是工厂,我们看看这个类如何编写:
public class TeacherFactory
{
private Teacher _teacher;
public static Teacher CreateTeacer(string teacherType)
{
switch (teacherType)
{
case "B":
_teacher = new EnglishTeacher();
break;
case "C":
_teacher = new MathTeacher();
break;
default:
_teacher = null;
break;
}
return _teacher;
}
}
现在只需要输入运算符号,工厂就实例化出合适的对象,通过多态,返回父类的方式实现了结果了:
Teacher _teacher;
_teacher = TeacherFactory.CreateTeacer("B");
_teacher.TeachCourse();
简单工厂模式其实是根据创建对象的不同去封装,简单工厂简明的说,就是到底要实例化谁,将我怎么实例化对象封装起来,达到封装,继承,多态的效果