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

单一职责原则(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(); } } }

 

你可能感兴趣的:(设计模式)