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

理解:

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

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


价值:

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

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

与抽象工厂对比:

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

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

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

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


与模板方法对比:

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

而工厂模式中,仅是将对象的创建延迟到子类中,同时他并没有相应的“模板”,因此,还是有一定的差别的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值