C#类单一职责 的 设计原则 是指 在一个 模块类中 只允许 添加新功能,尽量不允许 修改 此模块类原有的功能。
实现方法:
例如:需要对 PhoneFun.cs 类模块 进行 单一职责 设计,此类模块包含了对 PhoneFun相关的功能的方法:比如 1.打电话,2.发短信
需要把 打电话 和 发短信 功能 分别 使用 接口类和实现类
1.打电话接口类 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 单一职责.interfaceClass
{
public interface IHitPhone
{
void HitPhone(string PhoneNum);
}
}
1.1打电话实现类 需要继承打电话接口类。 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 单一职责.interfaceClass;
namespace 单一职责.realizeClass
{
public class HitPhoneClass : IHitPhone
{
public void HitPhone(string PhoneNum)
{
Console.WriteLine("打"+PhoneNum+"电话");
}
}
}
2.发短信接口类 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 单一职责.interfaceClass
{
public interface ISendMessage
{
void SendMessage(string PhoneNum);
}
}
2.1发短信实现类 需要继承发短信接口类。 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 单一职责.interfaceClass;
namespace 单一职责.realizeClass
{
public class SendMessageClass : ISendMessage
{
public void SendMessage(string PhoneNum)
{
Console.WriteLine("发"+PhoneNum+"短信");
}
}
}
3.下面 进行 模块PhoneFun.cs类的 单一职责 模式设计:需要 以 功能接口 的形式 创建私有字段。
定义 功能 方法,不实现任何 逻辑代码,要使用 接口方法调用。特点:在需要 修改PhoneFun.cs类的功能时,只需要修改 继承自 接口实现类就好,PhoneFun.cs此类只做 增加功能。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 单一职责.interfaceClass;
namespace 单一职责
{
public class PhoneFun
{
//以 功能接口 的形式 创建私有字段
private IHitPhone _HitPhone;
private ISendMessage _SendMessage;
public PhoneFun(IHitPhone _HitPhone, ISendMessage _SendMessage)
{
this._HitPhone = _HitPhone;
this._SendMessage = _SendMessage;
}
//定义 功能 方法
public void HitPhone(string PhoneNum)
{
//使用接口 方法调用
_HitPhone.HitPhone(PhoneNum);
}
public void SendMessage(string PhoneNum)
{
_SendMessage.SendMessage(PhoneNum);
}
}
}
4.业务变化 ,需要添加 挂断电话 ,代码如下:
5挂电话接口类 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 单一职责.interfaceClass
{
public interface IHangUpPhone
{
void HangUpPhone(string PhoneNum);
}
}
5.1挂电话实现类 需要继承挂电话接口类。 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 单一职责.interfaceClass;
namespace 单一职责.realizeClass
{
public class HangUpPhoneClass : IHangUpPhone
{
public void HangUpPhone(string PhoneNum)
{
Console.WriteLine("挂断"+PhoneNum+"的电话");
}
}
}
6模块PhoneFun.cs 单一职责 实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 单一职责.interfaceClass;
namespace 单一职责
{
public class PhoneFun
{
private IHitPhone _HitPhone;
private ISendMessage _SendMessage;
private IHangUpPhone _HangUpPhone;
public PhoneFun(IHitPhone _HitPhone, ISendMessage _SendMessage, IHangUpPhone _HangUpPhone)
{
this._HitPhone = _HitPhone;
this._SendMessage = _SendMessage;
this._HangUpPhone = _HangUpPhone;
}
public void HitPhone(string PhoneNum)
{
_HitPhone.HitPhone(PhoneNum);
}
public void SendMessage(string PhoneNum)
{
_SendMessage.SendMessage(PhoneNum);
}
public void HangUpPhone(string PhoneNum)
{
_HangUpPhone.HangUpPhone(PhoneNum);
}
}
}