设计模式学习——工厂方法模式

之前学过了简单工厂模式,简化了对象的创建,但是为啥又有工厂方法模式?

在简单工厂模式中每增加一种产品就要修改工厂类,工厂类职责过重,简单工厂模式不符合面向对象的设计原则开闭原则——对扩展开放,对修改关闭。

对于之前的 简单工厂模式 :https://blog.csdn.net/qq_36413982/article/details/107531944
加入要增加一个取模运算就要修改工厂类。

所以又引入了工厂方法模式。

缺点

1、类的个数成倍增加,导致类越来越多,增加维护成本。

2、增加系统的抽象性和理解难度。**

优点

1、不需要记住具体类名,甚至连具体参数都不用记忆

2、实现对象创建和使用分离

3、系统可扩展性变得非常好,不要修改接口和原类。

总的来说, 工厂方法模式 = 简单工厂模式 + 开闭原则

修改简单工厂模式计算器例子实现工厂方法模式

在这里插入图片描述

抽象的运算类工厂

class abstract_operate_fac   //工厂类
{
    
    
public:
    virtual operate *get_operate() = 0;
};

具体运算类工厂实现

//加法运算类工厂
class add_operate_fac : public abstract_operate_fac
{
    
    
public: 
    operate *get_operate();
}

operate *add_operate_fac::get_operate()
{
    
    
    return new add;
}

//减法法运算类工厂
class sub_operate_fac : public abstract_operate_fac
{
    
    
public: 
    operate *get_operate()
}

operate *sub_operate_fac::get_operate()
{
    
    
    return new sub;
}

//乘法运算类工厂
class mul_operate_fac : public abstract_operate_fac
{
    
    
public: 
    operate *get_operate()
}

operate *mul_operate_fac::get_operate()
{
    
    
    return new mul;
}

//除法运算类工厂
class div_operate_fac : public abstract_operate_fac
{
    
    
public: 
    operate *get_operate()
}

operate *div_operate_fac::get_operate()
{
    
    
    return new div;
}
add_operate_fac add_fac;
operate *add_opr = add_fac.get_operate();
add_opr->num1 = 2;
add_opr->num2 = 3;
add_opr->get_result(add_opr->num1, add_opr->num2);

sub_operate_fac sub_fac;
operate *sub_opr = sub_fac.get_operate();
sub_opr ->num1 = 2;
sub_opr ->num2 = 3;
sub_opr ->get_result(sub_opr ->num1, sub_opr ->num2);

猜你喜欢

转载自blog.csdn.net/qq_36413982/article/details/108299124
今日推荐