您的位置:首页 > 其它

设计模式(十二)—— Factory Method 模式

2012-06-09 17:07 127 查看
理解:

       当我们有一个类,他有多个派生类;该类中有一个对象,有多种实现方式。在该类中,我们需要使用该对象的方法,但实例化该对象是由不同的派生类确定的(象棋棋盘中是象棋对象,五子棋棋盘中是五子棋对象),因此,我们在父类中不能够进行初始化,只能够将其初始化延迟到子类当中。

实现方式是通过一个protected的createXXX()函数,让子类重写,以获得相应的实例化对象。

价值:

使得我们能够在不知道对象的具体形式的情况下,能够进行调用,可以在父类中封装一些流程。

否则,我们可能需要在父类中进行if-else 或者switch ,来进行对象的实例化。这样的话,父类必须要知道子类的信息,才能进行,使得耦合变大。

与抽象工厂对比:

抽象工厂,主要用于将对象从new的创建方式中脱离出来,使得对象的创建与使用分离开来,这样,对象要使用其他具体类进行实例化时,不会影响到使用对象的代码。

工厂模式,主要用于让类中的对象的实例化延迟到子类当中,以实现对象方法调用时的多肽效果。

因此,抽象工厂主要是提供外界使用的,让外接调用其创建对象的方法并隐藏其实现;而工厂方法主要是内部的实现方式,使用protected函数让子类重写创建对象的方法。用户可以知道是否使用了抽象工厂模式,而不会轻易知道是否使用了工厂模式。

因此,抽象工厂其名曰抽象,抽象往往是提供外界一个抽象类或者接口来定义其能够调用的方法,也意味着外界可以更清楚其方式了。

与模板方法对比:

模板方法中,也是在实现延迟到子类,使用protected的函数。但模板方法中,在父类中定义了函数调用方式、顺序,让子类来对其中的一些函数进行实现。

而工厂模式中,仅是将对象的创建延迟到子类中,同时他并没有相应的“模板”,因此,还是有一定的差别的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式