设计模式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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值