“实现接口”究竟意味着什么?

时间:2010-11-10 15:26:44

标签: design-patterns class interface

最后几天我经常遇到“实现界面”一词......我知道它的内容是什么,但我想了解更多信息和一些资源。类何时实现接口?

6 个答案:

答案 0 :(得分:4)

接口是一个契约,它指定了类必须创建的必需方法集。

例如:

public interface ITest
{
   public void DoSomething(int someInt);
}

public class MyClass : ITest
{
   public void DoSomething(int someInt)
   {
      ... Do some stuff
   }
}

如果未包含DoSomething方法,编译器将抛出错误。

答案 1 :(得分:2)

接口是类必须实现的功能规范。实现接口时,您要为类的任何使用者指定您提供给定接口中定义的功能。例如(在C#中):

public interface ISearchable
{
    List<object> Search(string query);
}

ISearchable是一个接口,它指定一个方法,理论上应该为类提供一些搜索功能。现在,任何想要实现搜索功能的类都可以实现ISearchable接口:

public class ConcreteSearchable : ISearchable
{
    public List<object> Search(string query)
    {
        // Implementation
    }
}

您现在有一个实现ISearchable接口的类。这提供了几个好处。首先,您已明确声明了类的某些行为。其次,您现在可以处理您的类(以及接口的其他实现)多态。

例如,如果有许多类型实现ISearchable接口,您可以创建一个SearchableFactory,它将根据某些参数构造一个具体类型。工厂的消费者不会关心混凝土类型......只要他们可以搜索它:

public class SearchableFactory
{
    public static ISearchable CreateInstance(string query)
    {
        if(query.Contains("SELECT"))
            return new SqlSearchable();
        else
            return new ConcreteSearchable();
    }
}

答案 2 :(得分:2)

接口是类需要实现的方法列表。这是一种将类如何与类提供的服务分离的方法。

你可以想象一下Stack数据结构。它的界面可能有以下内容:

push(Node);
Node pop();
Node peek();

现在,如果您使用数组来实现堆栈,您将把索引保存到数组中并使用它来执行操作。如果你有一个链表,你只需要指向头部。接口的重点是,只要您的实现提供了所需的方法,您的实现的用户就不需要知道您的实现类如何完成工作。

Java和C#等语言提供了明确的interfaces。其他如ruby或python,允许您使用相同的技术,但不使用关键字强制执行它。您可能会听到Duck Typing这个词。这是一种说法,如果某些东西实现了正确的接口,它可以被使用,无论实现如何。

答案 3 :(得分:2)

实施界面是什么意思?

如果我们从接口是什么开始,然后努力实现一种方法,那么也许是最好的。

示例#1:

世界上每一个麦当劳都有一定的共性。事实上,如果你想经营一家麦当劳特许经营店,你 必须 遵循他们的特许经营规则:

  1. 必须出售巨无霸。
  2. 餐馆必须有一个大M
  3. 必须支付特许经营费。
  4. 餐馆必须时刻保持清洁(原文如此!)。
  5. 这些是他们的规则。它在合同中。每家餐馆都必须遵守该合同。每家餐厅都略有不同,但就上述规则而言,它们是相同的。

    这对客户来说也是一件好事。如果您走进世界上任何一家麦当劳餐厅,您肯定知道可以购买巨无霸。

    麦当劳与接口有什么关系?

    “界面”只不过是一份契约。任何“实施”或签订合同的餐馆都必须遵守它。换句话说,任何实施麦当劳特许经营界面的餐厅都必须遵循它。

    为什么称为IMcDonald的界面而不是麦当劳的界面?

    当您命名界面时,通常的做法是以“I”开头。

    示例#2

    世界上所有的飞机都有一定的共性,无论哪种类型。换句话说,它们都实现了Iplane接口。

    IPlane接口规定任何实现它的平面必须具有:

    1. 两翼
    2. 引擎
    3. 它必须飞
    4. 因此,如果波音737遵循这些规则,作为客户,您保证您的购买将有翅膀并将飞行。以下是实施上述界面的波音737的示例:

       public interface IPlane
      {
          void Fly();
          void HasTWoWings();
          void Engine();
      }
      
      class Boeing737 : IPlane //  <-------------- the Boeing 737 implements the interface
      {
          // this means that the Boeing737 MUST have a fly, hastwowings and an engine method.
          // the interface doesn't specify HOW the plane must fly. So long as it does fly
          // the compiler doesn't care.
      
      
          public void Fly()
          {
              Console.WriteLine("Come fly with me, let's fly, let's fly awaaaaaaaay");
          }
      
          public void HasTWoWings()
          {
              Console.WriteLine("I've got two wings");
      
          }
      
          public void Engine()
          {
              Console.WriteLine("BRrrrrrrrooooooooooooooooooooooooooooooooom!");
          }
      }
      

      我希望能帮到你们。

      那有什么用呢?

      如果您是想要预订飞机的乘客,这将变得非常方便。你不确定哪些飞机可供你使用。而且你并不关心它,只要它们是飞机,只要它们飞行,并且有两个机翼和一个发动机。当你在机场时,你可能会得到一架波音,或者你可能会得到空中客车,或者你可能得到一个斯蒂格 - 但你知道无论你得到什么样的飞机,他们都会做一份工作。他们可能以不同的方式飞行,但他们都飞了。

      这允许您以这样的方式编写代码,以便最大限度地降低维护成本并使其更容易修改而不会导致错误。

答案 4 :(得分:1)

接口为您的代码增加了透明度。接口定义由类实现的合同。让我们说我告诉你,你可以成为我帮派的一部分,但你需要一直穿绿色衬衫。如果您说YES,那么您正在执行合同,现在您必须始终穿着绿色衬衫。

答案 5 :(得分:0)

接口通常是对函数的描述,它们作为参数需要什么以及它们将返回什么。描述如何使用函数以及从它们返回的内容。

实现接口意味着在函数名称,属性和返回值方面实际编写一些代码来完成接口的描述。