设计模式3-设计模式原则-单一职责

面向对象的三个特征:封装,继承,多态。

面向对象的优点:易扩展,易维护,可复用,灵活性好。

七大原则

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;
}

 

发布了26 篇原创文章 · 获赞 7 · 访问量 891

猜你喜欢

转载自blog.csdn.net/qq_29067097/article/details/104192036
今日推荐