概念:
有且只有一个(添加/删除功能)会引起类变更的。一个类只做一件事。
未使用单一职责:
class Player
{
public void Attack()
{
Console.WriteLine("攻击");
}
public void Hurt()
{
Console.WriteLine("受伤了");
}
}
//调用
Player player = new Player();
player.Attack();
player.Hurt();
总结:之后修改Attack功能模块和Hurt功能模块则需要修改Player类,添加代码也需要修改Player类。不符合单一职责的概念
使用单一职责:
//第一步:抽象成接口
interface IAtk
{
void Attack();
}
interface IHurt
{
void Hurt();
}
//第二步:类实现接口
class HurtClass : IHurt
{
//实现虚方法,子类进行重写,调用时多态
public virtual void Hurt()
{
Console.WriteLine("受伤了");
}
}
class AtkClass : IAtk
{
//实现虚方法,子类进行重写,调用时多态
public virtual void Attack()
{
Console.WriteLine("攻击");
}
}
//第三步:类去调用接口方法
class Player
{
//使用接口是为了以防写死
private IHurt hurt;
private IAtk atk;
public Player(IHurt _hurt, IAtk _atk)
{
hurt = _hurt;
atk = _atk;
}
public void Hurt()
{
hurt.Hurt();
}
public void Attack()
{
atk.Attack();
}
}
//调用
Player b = new Player(new HurtClass(),new AtkClass());
b.Attack();
b.Hurt();
总结:经过上面三步之后,除了添加/删除功能会改变Player类,修改模块功能(Attack、Hurt)的责任则回到了继承接口的类(AttackClass、HurtClass ),在继承接口的类中进行修改。