interface-接口的理解使用

声明关键字interface

在接口中不能有方法体

接口中定义的成员都是公开的,不能包含访问修饰符

在初识接口的时候,不太明白接口的意义是什么

先来梳理一下运用接口的流程

1.定义一个接口,在接口定义若干个方法,事件

public interface IState  //以大写I开头
{
    void Handle();//定义一个名为Handle的方法,具体的实现交给继承接口的类
}

2.创建多个类,继承接口,实现接口里面的具体方法,每个类里面实现接口方法的具体逻辑各不相同

public class TestA:IState
{
    public void Handle()
    {
        Debug.log("这是TestA");
    }
}

public class TestB:IState
{
    public void Handle()
    {
        Debug.log("这是TestB");
    }
}

3.在需要调用时声明接口实例化具体实现类,调用需要的方法

public class Main : MonoBehaviour
{
    Void Start()
    {
        IState mState= new testA();//这里需要注意,接口是不能直接实例化的,需要new 一个接口继承类
        mState.Handle();
        mState= new TestB();
        mState.Handle();
    }
}

如果不使用接口,那当需要某个具体的功能时可能就是如下这样调用所需要的方法

public class Main : MonoBehaviour
{
    Void Start()
    {
        testA mStateA= new testA();
        mStateA.Handle();
        testB mStateB= new TestB();
        mStateB.Handle();
    }
}

观察可以发现一个声明mState接口来实例化不同的实现类,从而调用方法,另一个是直接声明实现类对象从而调用方法,区别在于都是要使用实现类里的方法,使用接口是中间多走了一步流程,直接实例化方法看上去方便很多,直观简单。

在这里的时候我就会想,干嘛要这么复杂的去使用接口,直接实例化类调用方法不是更轻松简单嘛,这是我在最初编写程序的时候,功能和需求都足够简单支撑我单纯的想法。

但在程序逻辑越来越复杂,相互交织的功能越来越多的时候,接口的作用就体现出来了,接口本身并不是为了具体的功能去服务的,使不使用接口对于程序来说都可以达到效果,使用接口的意义在代码的设计上,减少代码的耦合性,把杂乱无章的代码做一下规范,减少代码到处乱调用,为后期的维护性提供便捷。

哪些情况下使用接口:目前的总结为当一个物体具备多种表现方式的时候,比方说游戏设计里规定了这个物体是一块石头,那就直接显示为石头就好,但如果为了游戏设计玩法考虑,当有一定的触发条件时这个物体可以是树,可以是绿草,也可以是石头时,就不能单单理解为这是一个可以变成其他物体的石头,而是一个可以变成多种形态的物体,这个多形态的物体就是接口,让树,绿草,石头这些类去继承接口,这样在需要表现的地方依据判定条件使用接口来实例化实现类,或者把触发机制写在实现类里,调用接口方法时直接穿触发条件。

这样的好处是,如果这个物体需要修改想变成一朵花那就写个花类继承这个接口物体就好,如果不想变成石头,那就让石头类取消继承接口物体,在梳理代码逻辑上会清晰易懂很多。

猜你喜欢

转载自blog.csdn.net/huangzhenxun/article/details/81976522