pruebas de unidad de interfaz

La naturaleza de la interfaz es el contrato (contrato), a la vez visible.

Y sumando el número medio de matriz

Los diferentes tipos de matrices, diferentes métodos

using System;
using System.Collections;

namespace March9
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            int[] nums1 = new int[] {1, 2, 3, 4, 5};
            ArrayList nums2 = new ArrayList {1, 2, 3, 4, 5};
            Console.WriteLine(Sum(nums1));
            Console.WriteLine(Avg(nums1));
        }

        static int Sum(int [] nums)
        {
            int sum = 0;
            foreach (var n in nums)
            {
                sum += n;
            }
            return sum;
        }

        static double Avg(int[] nums)
        {
            int sum = 0;
            double count = 0;
            foreach (var n in nums)
            {
                sum += n;
                count++;
            }
            return sum / count;
        }
        
    }
}

uso de interfaz

using System;
using System.Collections;

namespace March9
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            int[] nums1 = new int[] {1, 2, 3, 4, 5};
            ArrayList nums2 = new ArrayList {1, 2, 3, 4, 5,6};//ArrayList,array继承自IEnumerable接口
            Console.WriteLine(Sum(nums2));
            Console.WriteLine(Avg(nums2));
        }

        static int Sum(IEnumerable nums)
        {
            int sum = 0;
            foreach (var n in nums)
            {
                sum +=(int) n;
            }
            return sum;
        }

        static double Avg(IEnumerable nums)
        {
            int sum = 0;
            double count = 0;
            foreach (var n in nums)
            {
                sum += (int) n;
                count++;
            }
            return sum / count;
        }
        
    }
}

Interfaz es un débilmente acoplados nacido, para facilitar la función de la alternativa,

using System;
using System.Collections;

namespace March9
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            var user=new User(new VIVO());//实现用户使用不同的手机打电话,发信息
            user.Userphone();
        }

    }

    class User
    {
        private IPhone _phone;
        public User(IPhone phone)//接收接口类型的变量
        {
            _phone = phone;
        }
        public void Userphone()
        {
            _phone.Dial();
            _phone.Pickup();
            _phone.Send();
            _phone.Receive();
        }
        
    }


    interface IPhone
    {
        void Dial();//拨号
        void Pickup();//接听
        void Send();//发送
        void Receive();//接收
    }

    class NokiaPhone:IPhone
    {
        public void Dial()
        {
            Console.WriteLine("Nokia is calling");
        }
        public void Pickup()
        {
            Console.WriteLine("hello,tim");
        }
        public void Send()
        {
            Console.WriteLine("Nokia is ring");
        }
        public void Receive()
        {
            Console.WriteLine("hello,maray");
        }
    }
    
    class VIVO:IPhone
    {
        public void Dial()
        {
            Console.WriteLine("VIVO is calling");
        }
        public void Pickup()
        {
            Console.WriteLine("hello");
        }
        public void Send()
        {
            Console.WriteLine("Vivo is send");
        }
        public void Receive()
        {
            Console.WriteLine("Vivo is receiving");
        }
    }
    
    
}

Idioma para diseño orientado a objetos soporte integrado: Dependencia Inversion, aislamiento interfaz, abriendo y cerrando el principio ......

dependencia de Inversion

También en este caso depende, sobre el conductor está siguiendo el coche. Tipo de conductor del coche hay un campo, que están estrechamente unidas. Cada individuo en este caso sólo se puede abrir el correspondiente auto, otros coches no puedan abrir

conductor en el campo ya no es el tipo de coche y otros vehículos, pero una interfaz de base, ejecutar una variedad de métodos para llamar a un coche, no ha sido inversión de dependencia.

Cuando el usuario y el proveedor de servicios de múltiples servicios han seguido una interfaz, que puede ser más partido. A través de la interfaz como un puente para conseguir diferentes instancias de la llamada al método.

interfaz Segregación

Contrato: Party (clase derivada) que no era más, B (interfaz) a no menos. Si no ha habido ninguna llamada, se muestra que es superfluo, es una interfaz de grasa.
Responsabilidad solo principio, una clase de una sola cosa.
Ejemplo: Supongamos que un hombre abrir una variedad de vehículos

using System;

namespace March10
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            var a=new Driver(new Car());//此时car类和Truck都能开汽车,因为他继承自IVhicle接口,如果我想开坦克呢?那么就要改变Driver引用实例的变量的类型。
            a.Drive();
        }
    }


    class Driver
    {
        private IVehicle _vehicle;//此时,IVehicle类型的变量能引用继承自IVhicle接口实例的方法;ITank类型的变量能引用继承自ITank接口的实例的方法

        public Driver(IVehicle vehicle)
        {
            _vehicle = vehicle;
        }

        public void Drive()
        {
            _vehicle.Run();
        }


    }

    interface IVehicle
    { 
        void Run();
    }

    class Car:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("car is runnning!");
        }
    }

    class Truck:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("truck is running!");
        }
    }

    interface ITank
    {
        void Fire();
        void Run();
    }

    class LightTank:ITank
    {
        public void Fire()
        {
            Console.WriteLine("开炮");
        }

        public void Run()
        {
            Console.WriteLine("ka……ka……ka");
        }
    }
}

Este método de cambio de la bolsa por encima de un montón de problemas, el problema es el paso de la interfaz en el método de la grasa, el fuego () con menos, debido a las diferentes funciones, sólo quiero conducir, en lugar de incendio hacer otras cosas.
El método de fuego () para hacer una única interfaz, y luego dejar que hereda de la interfaz iTANK dos interfaz base. La interfaz es la herencia múltiple, y las clases no puede.

using System;

namespace March10
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            var a=new Driver(new Car());
            a.Drive();
        }
    }


    class Driver
    {
        private IVehicle _vehicle;

        public Driver(IVehicle vehicle)
        {
            _vehicle = vehicle;
        }

        public void Drive()
        {
            _vehicle.Run();
        }


    }

    interface IVehicle
    { 
        void Run();
    }
    interface Single
    { 
        void Fire();
    }

    class Car:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("car is runnning!");
        }
    }

    class Truck:IVehicle
    {
        public void Run()
        {
            Console.WriteLine("truck is running!");
        }
    }

    interface ITank:IVehicle,Single
    {
    }

    class LightTank:ITank
    {
        public void Fire()
        {
            Console.WriteLine("开炮");
        }

        public void Run()
        {
            Console.WriteLine("ka……ka……ka");
        }
    }
}

En este punto, llamamos interfaz iTANK, sólo puede centrarse en el método run IVhicle heredada desde el interior, conductor sólo ejecutar llamadas de método, la persona que llama no sirven más que para ser.
La pregunta de nuevo, si cambiamos el _vehicle privada iTANK clase de controlador, cambios de tipo constructor variables, por lo que encontrará, clases de coches y camiones método de ejecución no pueden ser llamados, porque el exceso de uso de la interfaz, y debe pasar pequeña interfaz.

Supongo que te gusta

Origin www.cnblogs.com/lpxspring/p/12448049.html
Recomendado
Clasificación