系列综述:
- xxx
- xxx
- xxx
文章目录
- 对象创建型模式
- 简单(静态)工厂模式
- 工厂方法模式
- 参考博客
😊点此到文末惊喜↩︎
对象创建型模式
简单(静态)工厂模式
- 抽象原理
- 抽象产品基类 :定义了产品的规范,描述了产品的主要特性和功能。
- 具体产品子类 :实现或者继承抽象产品的子类
- 静态工厂类 :提供了创建产品的方法,调用者通过该方法来获取产品。
- 代码原理
- 基类:数据成员+虚函数接口(动态基础)
- 派生类:实现虚函数,即实现类的具体功能
- 静态工厂类:使用switch结构根据传入的参数动态new对应子类对象
- 调用:使用基类对象承接静态工厂动态生成对应子类对象赋值给父类
- 特点:
- 破坏开闭原则。拓展产品需要修改原工厂内部的逻辑
- 符合单一职责原则。将对象的
创建逻辑
和实现的业务逻辑
进行了分离
- 示例代码
// 基类:纯虚函数接口(抽象的规则)+ 规则操作的数据成员
class Operation
{
public:
//
virtual int GetResult() =0;
public:
double m_Num1;
double m_Num2;
};
// 算法子类1:重新父类虚函数,实现算法
class OperationAdd:Public Operation
{
public:
int GetResult();
};
// 算法子类2:重新父类虚函数,实现算法
class OperationSub:Public Operation
{
public:
int GetResult();
};
// 静态工厂类:根据对象实例化
class OperationFactry
{
public:
OperationFactry(void);
~OperationFactry(void);
public:
// static主要功能是无需创建类,就可以调用方法
static Operation CreateOperate(int n )
{
switch(n)
{
case 1:
return new OperationAdd;
break;
case 2:
return new OperationSub;
break;
}
}
};
// 调用
Operation oper;
oper = OperationFactry.CreateOperate("+");// 使用工厂动态生成对应子类对象赋值给父类
oper.m_Num1 = 1;// 给父类对象的数据成员进行赋值
oper.m_Num2 = 2;
double result = oper.GetResult();
工厂方法模式
- 将简单工厂模式中
工厂类的分支
导致的与对象创建的耦合
使用抽象类进行解决
// 工厂方法接口类:根据对象实例化
interface IFactory{
Operation CreateOperate();
}
// 工厂子类
class OperationAddFactory : IFactory{
public Operation CreateOperate(){
return new OperationAdd();
}
}
class OperationSubFactory : IFactory{
public Operation CreateOperate(){
return new OperationSub();
}
}
// 调用
IFactory factory = new OperationXXXFactory();// 实例化工厂对象
Operation oper = factory. CreateOperate();// 使用工厂动态生成对应子类对象赋值给父类
oper.m_Num1 = 1;// 给父 类对象的数据成员进行赋值
oper.m_Num2 = 2;
double result = oper.GetResult();
🚩点此跳转到首行↩︎
参考博客
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用
- 待定引用