接口如何降低耦合(C#例)

      在程序设计中为了达到“高内聚,低耦合”的要求,我们常常会引用接口,使一个接口作为两个类之间的媒介。那么接口是怎样解除两个类之间的耦合关系呢,解决的依据是什么?下面由我一一道来。

       利用添加接口来解除耦合,还是利用了面向对象三大特性中的多态,因为多态的特性是父类或者接口的引用是可以接受子类对象。首先声明一个ITest接口,这个接口内有一个Say方法

interface ITest()    //声明一个接口
{
    void Say();
}

两个类Test1 和 Test2 分别实现此接口

public class Test1 : ITest
{
    public void Say()
    {
        Console.WriteLine("Test1");
    }
}

public class Test2 : ITest
{
    public void Say()
    {
        Console.WriteLine("Test2");
    }
}

在代码中耦合低可以体现在修改(删除)调用层接受层不受影响。比如我有一个方法SayName,将方法的参数类型设置为借口ITest类型。

public static void SayName(ITest test)
{
    Console.WriteLine(test);    
}

在调用时,就可以这样传递参数

static void Main(string[] args)
{
    Test1 test1 = new Test1();
    Test2 test2 = new Test2();
    
    //无论传入类型是test1还是test2均可以达到预期效果,解除了依赖具体类的耦合
    SayName(test1);
    SayName(test2);

    Console.ReadKey();
}

这样就达到了降低耦合的目的,SayName方法只需要接口类型,具体传入的是哪个对象无需关注,因为接口是一种抽象度更高的规则,SayName方法进来的参数一定是实现Test接口类的对象。即使将Test1与Test2两个类删除,ITest接口还在,那么SayName方法就可以继续使用,并且随意扩展一个新的类来实现Test接口。(也是设计模式中里氏代换原则的一个体现)同时还符合了依赖倒转原则(针对接口编程,依赖与抽象而不是具体类)这就可以实现多样性。

再举一个例子:比如统一用接口“动物”作为参数,统一调用“动物”的Say方法,但是传入的则是猪,狗,猫等不同的具体实例,那么Say的表现形式就不同了,但是你又不需要修改调用代码,因为是根据接口编程。

发布了40 篇原创文章 · 获赞 10 · 访问量 7114

猜你喜欢

转载自blog.csdn.net/xyzyhs/article/details/104104438
今日推荐