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


    单一职责原则(SRP)

    定义:就一个类而言,应该仅有一个引起它变化的原因

    场景: 一个公司有3类员工,分别是 主管,程序员,销售

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 设计模式原则.单一职责
    {
       public  class Employee
        {  
    
           //程序员写代码
           public string Coding()
           {
               return "程序员写代码";     
           }
           //销售打电话
           public string Calling()
           {
               return "销售打电话";
           }
           //主管叼烟
           public string Smoking()
           {
               return "主管叼烟";
           }       
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq; 
    using System.Text;
    using 设计模式原则.单一职责;
    
    namespace 设计模式原则
    {
        class Program
        {
            static void Main(string[] args)
            {
                 Console.WriteLine("上班了.....");
    
                 Employee emp = new Employee();
                 Console.WriteLine(emp.Calling());
                 Console.WriteLine(emp.Coding());
                 Console.WriteLine(emp.Smoking());             
                      
                 Console.Read();
    
            }
        }
    }

     这时变化来了主管需要叫人加班

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 设计模式原则.单一职责
    {
       public  class Employee
        {  
           //程序员写代码
           public string Coding()
           {
               return "程序员写代码";     
           }
           //销售打电话
           public string Calling()
           {
               return "销售打电话";
           }
           //主管叼烟
           public string Smoking()
           {
               return "主管叼烟";
           }
           //变化 突发情况  主管要使唤人了
           //程序员加班写代码
           public string  CoderWorkOvertime()
           {
               return "程序员加班" + Coding();
           }
           //销售加班打电话
           public string SellerWorkOvertime()
           {
               return "销售加班" + Calling(); 
           }    
           //.....等等                 
        }
    }

    这样就会发现Employee类 在主管,销售,程序员都会引起这个类发生变化,一旦发生变化方法就会增加,类就需要修改,当代码量多时,维护困难

    这时就需要分类,把Employee的职责分离

    程序员:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 设计模式原则.单一职责
    {
        public class CoderEmployee
        {
            //程序员写代码
            public string Coding()
            {
                return "程序员写代码";
            }
        }
    }

    销售:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 设计模式原则.单一职责
    {
       public  class SellerEmployee
        {
    
            //销售打电话
            public string Calling()
            {
                return "销售打电话";
            }
        }
    }

     主管:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace 设计模式原则.单一职责
    {
       public class HeaderEmployee
        {     
            //主管叼烟
            public string Smoking()
            {
                return "主管叼烟";
            }
            //变化 突发情况  主管要使唤人了 
           
           //程序员加班写代码
            public string CoderWorkOvertime(CoderEmployee coder)
            {
                return "程序员加班" + coder.Coding();
            }
            //销售加班打电话
            public string SellerWorkOvertime(SellerEmployee seller)
            {
                return "销售加班" + seller.Calling(); 
            } 
        }
    }

     分类过后 Employee职责被分离。主管,销售,程序员 都只关心自身的职责。如果还需要添加职责的话只需要在对应的类里添加对应的职责。

    using System;
    using System.Collections.Generic;
    using System.Linq; 
    using System.Text;
    using 设计模式原则.单一职责;
    
    namespace 设计模式原则
    {
        class Program
        {
            static void Main(string[] args)
            {
                 Console.WriteLine("上班了.....");
              HeaderEmployee header = new HeaderEmployee();
                 SellerEmployee seller = new SellerEmployee();
                 CoderEmployee coder = new CoderEmployee();
        
         Console.WriteLine(seller.Calling());
    //销售打电话 Console.WriteLine(coder.Coding());//程序员写代码 Console.WriteLine(header.Smoking());//主管叼烟; Console.WriteLine(header.CoderWorkOvertime(coder)); Console.WriteLine(header.SellerWorkOvertime(seller)); Console.Read(); } } }
  • 相关阅读:
    使用express+multer实现node中的图片上传
    利用H5构建地图和获取定位地点
    移动端开发基础 干货分享
    关于angularJS的一些用法
    你好 JSONP !!!!
    CentOS7使用Alien将RPM从DE转换为DEB和DEB转换为RPM包
    [Windows] visio2019破解激活
    python---九九乘法表代码
    HTTP 请求方式: GET和POST的比较
    win10WLAN没有有效的ip配置
  • 原文地址:https://www.cnblogs.com/yangjingqi/p/3648269.html
Copyright © 2020-2023  润新知