zoukankan      html  css  js  c++  java
  • 《C#入门详解》刘老师 接口,依赖反转,单元测试

    接口,依赖反转,单元测试

    一、IEnumerable接口使用

     1 using System;
     2 using System.Collections;
     3 using System.Collections.Generic;
     4 using System.Linq;
     5 using System.Text;
     6 using System.Threading.Tasks;
     7 
     8 namespace IEnumerable接口使用
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             int[] nums1 = new int[] { 1, 2, 3, 4, 5 };
    15             ArrayList nums2 = new ArrayList { 1, 2, 3, 4, 5 };
    16             Console.WriteLine(sum(nums2));
    17             Console.WriteLine(Avg(nums2));
    18             Console.WriteLine(sum(nums1));
    19             Console.WriteLine(Avg(nums1));
    20         }
    21         //供方为整形数组和Arraylist    供方Array实现了IEnumerable接口,Arraylist也实现了IEnumerable这个接口,Array和Arraylist都遵守这个锲约保证自己可以被迭代
    22         //需方为Sum  和  Avg这两个函数   ,需方我只要求你传进来的参数可以被迭代就行了,因为我要用foreach循环去迭代里面的每一个整数
    23 
    24         //供方需方都遵守IEnumerable接口这个锲约
    25         static int sum(IEnumerable nums)  //int[] nums     ;;  ArrayList nums(object类型的所以要加int)
    26         {
    27             int sum = 0;
    28             foreach (var n in nums) sum += (int )n;
    29             return sum;
    30         }
    31 
    32         static double Avg(IEnumerable nums)
    33         {
    34             int sum = 0;
    35             double count = 0;
    36             foreach( var n in nums) { sum +=(int) n;count++; }
    37             return sum / count;
    38         }
    39 
    40     }
    41 }

     二、接口(供需双方都满足的锲约)

    类与类之间,对象与对象之间分工合作,面向对象世界里有一个术语叫做依赖,服务的提供者和服务的使用者之间有一个依赖关系。实现接口,必须要把接口里的所有成员全部实现。

     1 /*========人和手机之间是解耦的============*/
     2 
     3 using System;
     4 using System.Collections.Generic;
     5 using System.Linq;
     6 using System.Text;
     7 using System.Threading.Tasks;
     8 
     9 namespace Interface_Example
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             // IPhone V = new NokiaPhone();实现接口的实例
    16             var user = new PhoneUSER(new NokiaPhone());      //(V);
    17             user.usephone();
    18         }
    19     }
    20 
    21 
    22     class PhoneUSER
    23     {
    24         private IPhone _phone;
    25         public PhoneUSER (IPhone phone)
    26         {
    27             _phone = phone;
    28         }
    29         public void usephone()
    30         {
    31             _phone.Dial();
    32             _phone.PickUP();
    33             _phone.Send();
    34             _phone.Receive();
    35 
    36         }
    37 
    38 
    39     }
    40 
    41 
    42 
    43     interface IPhone
    44     {
    45         void Dial();
    46         void PickUP();
    47         void Send();
    48         void Receive();
    49 
    50     }
    51 
    52     class NokiaPhone : IPhone
    53     {
    54         public void Dial()
    55         {
    56             Console.WriteLine("Nokia calling...");
    57         }
    58 
    59         public void PickUP()
    60         {
    61             Console.WriteLine("Hello,this is tim");
    62         }
    63 
    64         public void Receive()
    65         {
    66             Console.WriteLine("Nokia message ring...");
    67         }
    68 
    69         public void Send()
    70         {
    71             Console.WriteLine("hello");
    72         }
    73     }
    74 
    75     class EricssonPhone : IPhone
    76     {
    77         public void Dial()
    78         {
    79             Console.WriteLine("EricssonPhone calling...");
    80         }
    81 
    82         public void PickUP()
    83         {
    84             Console.WriteLine("hi,this is tim");
    85         }
    86 
    87         public void Receive()
    88         {
    89             Console.WriteLine("Ericsson message ring...");
    90         }
    91 
    92         public void Send()
    93         {
    94             Console.WriteLine("good evening");
    95         }
    96     }
    97 
    98 
    99 }
    View Code

    人和手机之间是解耦的。

    三、依赖反转

    人和手机之间是解耦的。什么是解耦?解耦在代码中的表现就是依赖反转(依赖倒置)。单元测试就是依赖反转在开发中的直接应用。

     1 /*============强耦合,依赖关系,电扇依赖电源=======*/
     2 using System;
     3 
     4 namespace InterfaceExample
     5 {
     6 
     7     class Program
     8       {
     9        var fan = new DeskFan(new PowerSupply());
    10        Console.Writeline(fan.Work());
    11        }
    12     class PowerSupply
    13       {
    14         public int GetPower()
    15           {
    16             return 100;
    17            }
    18        }
    19 
    20     class DeskFan
    21       {
    22         private PowerSupply _powerSupply;
    23         public DeskFan(PowerSupply powerSupply)
    24           {
    25              _powerSupply = powerSupply;
    26            }
    27          public string Work()
    28            {
    29             int power = _powerSupply.GetPower();
    30             if (power<=0)
    31             {return "won't work!!!!";}
    32             else if(power<100)
    33             {return "slow!!!!";}
    34              else if(power<200)
    35              {return "work fine!!!!!!";}
    36              else
    37              {return "warning!!!!!!";}
    38              } 
    39        }
    40 
    41 }

     1 /*===================解耦==================*/
     2 using System;
     3 
     4 namespace InterfaceExample
     5 {
     6 
     7     class Program
     8       {
     9        var fan = new DeskFan(new PowerSupply());
    10        Console.Writeline(fan.Work());
    11 
    12        }
    13 
    14     InterFace IPowerSupply
    15       { int GetPower();}
    16 
    17 
    18     class PowerSupply : IPowerSupply
    19       {
    20         public int GetPower()
    21           {
    22             return 100;
    23            }
    24        }
    25 
    26     class DeskFan
    27       {
    28         private IPowerSupply _powerSupply;
    29         public DeskFan(IPowerSupply powerSupply)
    30           {
    31              _powerSupply = powerSupply;
    32            }
    33          public string Work()
    34            {
    35             int power = _powerSupply.GetPower();
    36             if (power<=0)
    37             {return "won't work!!!!";}
    38             else if(power<100)
    39             {return "slow!!!!";}
    40              else if(power<200)
    41              {return "work fine!!!!!!";}
    42              else
    43              {return "warning!!!!!!";}
    44 
    45              } 
    46 
    47 
    48        }
    49 
    50 
    51 
    52 }

    四、单元测试

           

  • 相关阅读:
    解决maven托管项目中pom.xml存在坐标标红的问题
    Jquery取form表单中的所有参数
    解决IntelliJ IDEA控制台输出中文乱码问题
    Maven项目打包及jar包与war包的区别
    IDEA创建Maven web项目(项目结构组织、文件编译及运行明细)
    http学习笔记--报文构成
    http报文结构
    mount: unknown filesystem type 'vboxsf'
    使用shell做过时处理以及发送邮件的事例
    fuelphp 日志文件保存路径以及日志文件名变更中遇到的问题总结
  • 原文地址:https://www.cnblogs.com/zfcsharp/p/13737447.html
Copyright © 2011-2022 走看看