C#设计模式-工厂方法(总结)
在下列情况下,应该考虑使用工厂方法:
1.一个类无法预测它要创建的对象属于那一个类。
2.一个类用它的子类来指定所创建的对象。
3.把要创建那一个类的信息局部化的时候。
简单的工厂模式也就是有一个类负责决定在单继承体系结构中实例化那一个子类(又称派生类)。
工厂方法模式(Factory Method Pattern)对这种思想进行了巧妙的扩展,它不是用一个专门的类来实例化那一个子类。相反,超类(又称基类、父类)把这种决定延迟到每个子类。这种模式实际上没有决策点,既没有直接选择一个子类实例化的决策。按这种模式编写的程序定义了一个抽象类,它去创建对象,但让子类决定创建哪一种对象。
如上UML图,Event为基类,但他并没有去决定让任何一个类去负责实例化某个子类,而是让它的子类PrelimEvent或TimedFinalEvent来决定创建哪一种对象,如StralghtSeeding或ClrcleSeeding。
Event及Seeding都为abstract类,让子类去实现它们的方法。
当然还会有其它一些类,用来存储对象的类或者功能类。
对于实现工厂模式,还需要考虑几个问题:
1.基类是一个抽象类,模式必须返回一个完整的可工作的类。
2.积累包含默认方法,除非默认方法不能胜任,才会调用这些方法。
3.可以将参数传递给工厂,告诉工厂返回那一个类型的类。这种情况下,类可以共享相同的方法名,但完成工作可以不同。
对于工厂方法,很多地方还很模糊,想用到实际应用中,还需大量的思考判断,积累经验。只有不断的琢磨,才能提高自己!