C# 设计原则 之 单一职责 原则

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值