design pattern的学习和思考(3)

工厂方法(Factory Method) 

工厂方法是定义了一个创建对象的接口,专门负责创建此种类的对象,下面先来看一个非常简单的工厂方法

class  Product
{}
class  Creator
{
public :
    Product
*  CreateProduct()
    {
        
return   new  Product;
    }
}

Creator就是一个工厂类,用来创建Product这个对象的实例,从本质上来说,工厂方法就是将对象的创建过程进行了封装,将类的实例化过程延迟了,这样做的一个显而易见的好处就是,我们可以通过继承Creator来指定具体实例化哪一个类。很多人也许已经想到,前面说的抽象工厂就是由一系列的工厂方法来实现的。

工厂方法的一个缺点是,我每有一个子类,就必须继承一个创建该子类的工厂类,这有可能使得代码量急剧增加,有几个方法可以避免这种情况,一个是实用带参数的创建方式,如下面的代码

class  ProductA :  public  Product
{}
class  ProductB :  public  Product
{}
class  CreatorParam : public Creator
{
public :
    Product
*  CreateProduct( int  ProductID)
    {
        
switch (ProductID)
        {
        
case   0 return   new  ProductA;
        
case   1 return   new  ProductB;
        
default return   0 ;
        }
    }
}    

还有一种办法是使用模板工厂,这种方法很灵活,而且对于创建不同的工厂类非常有效

template < typename T >
class  TCreator
{
public :
    Product
*  CreateProduct()
    {
        
return   new  T;
    }
}

// 调用
TCreator < ProductA >  CreatorForA;     // ProductA的工厂类
TCreator < ProductA >  CreatorForB;     // ProductB的工厂类

工厂方法非常简单和直观,也许在大家平时的编码中就会不知不觉的用到,我觉得,在选择创建型的模式中,可以优先考虑采用工厂方法,再在此基础上选择其他的模式来设计。

最后还是献上UML图


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值