面向对象的三个特征:封装,继承,多态。
面向对象的优点:易扩展,易维护,可复用,灵活性好。
七大原则
1. 单一职责原则
1.1 描述
类职责单一,一个类只有一个引起变化的原因。解决了修改职责引起其他职责故障的风险。
1.2 优点
1) 功能单一,将类的复杂性。
2 ) 可读性强,提高系统的维护性
3) 变更引起的风险降低,一个类职责变变更,不会引起其他类职责出现问题。
1.3 缺点
职责拆分太细会导致类爆炸。如果代码足够简单,可以考虑方法单一职责。
1.4 示例
没有使用单一职责模式示例
#include "stdafx.h"
#include <iostream>
/*
ProductFactory类包含了三个职责,职责1材料加工,职责2生产材料A,职责3生产材料B,违反了单一职责模式
如果修改材料A的材料加工就影响到材料B的生产,使功能模块之间有了相互影响。
*/
class ProductFactory
{
public:
//材料加工
std::string materialProcess(std::string material)
{
return material + "加工完成";
};
//生产材料A
std::string ProductA(std::string material)
{
return materialProcess(material) + " 生产材料A完成";
};
//生产材料B
std::string ProductB(std::string material)
{
return materialProcess(material) + " 生产材料B完成";
};
};
int main()
{
ProductFactory productFactory;
std::cout<<productFactory.ProductA("材料").c_str() << std::endl;
std::cout<<productFactory.ProductB("材料").c_str() << std::endl;
getchar();
return 0;
}
使用单一职责模式
#include "stdafx.h"
#include <iostream>
/*
每个类都有单一的职责,由1个类变成6个类去实现。能够很好的降低了功能依赖性,
但是明显的可见的使类数量暴涨,可能会导致维护起来复杂。
所以职责划分的颗粒度需要编程者去把握
*/
//加工材料接口类
class IMaterialProcess
{
public:
~IMaterialProcess() {};
protected:
virtual std::string materialProcess(std::string material)=0;
};
//生产产品接口类
class IProcductFactory
{
public:
~IProcductFactory() {};
protected:
virtual std::string Procuct(std::string material) = 0;
};
//加工材料A实现类
class MaterialAProcess:public IMaterialProcess
{
public:
std::string materialProcess(std::string material)
{
return "加工材料A" + material;
}
};
//加工材料B实现类
class MaterialBProcess :public IMaterialProcess
{
public:
std::string materialProcess(std::string material)
{
return "加工材料A" + material;
}
};
//生产产品A实现类
class AProcductFactory:public IProcductFactory
{
public:
~AProcductFactory() {};
protected:
virtual std::string Procuct(std::string material)
{
return " 生产材料A完成";
};
};
//生产产品B实现类
class BProcductFactory :public IProcductFactory
{
public:
~BProcductFactory() {};
protected:
virtual std::string Procuct(std::string material)
{
return " 生产材料B完成";
};
};
int main()
{
return 0;
}