Cha*_*ell 7 oop design-patterns class-design interface
可能重复:
我如何知道何时创建界面?
我想知道使用接口的意义.
你使用Interfaces吗?如果是这样,您何时决定使用它们,何时决定不使用它们?
我现在已经为我的服务层和我的存储库层定义了接口,但我想知道我是否错过了其他有用的地方.
我想我只是不完全明白他们的目的.
Viv*_*ath 10
接口定义合同.任何实现接口的类都必须履行该合同.这意味着该类必须实现接口中定义的方法.
一个接口基本上说"我正在定义所有实现者必须做的事情.我不关心你是怎么做的,但你必须支持我指定的这些操作".
接口的另一个用途是您可以在方法签名或类型定义中使用它们来指定对象的最通用类型.例如,在Java中Map是一个由其他类(如HashMap或)实现的接口LinkedHashMap.这两个HashMap和LinkedHashMap基本类型Map.他们实现相同的方法,但他们以不同的方式做事(LinkedHashMap保留插入顺序).
考虑一下您有一个接受地图的方法的情况.如果没有接口,则需要为每种类型的映射指定一种方法.实际上,你可以通过重载方法来做到这一点,但这种方法并不是很好.更好的方法是将方法参数的类型指定为Map.然后,任何实现的类Map都可以传递给该方法.这样,您不必为每种类型的地图指定方法,也不必将使用方法的人员限制为地图的特定实现.
接口还保证在实现类时存在指定的功能.因此,它还提供了访问该功能的标准方法.在设计API时,接口也很有用(这样,您可以为要公开的内容指定标准接口).
接口的另一个好处是它使重构变得容易.假设您想要切换某种对象的实现.该对象可能是方法参数,也可能是类属性.由于您已将该参数或对象键入为接口,因此您只需创建一个实现接口的新类,然后传递该类.由于您使用了界面,因此您没有对类的详细信息做出额外的假设.该接口抽象出您正在使用的类的实现细节.这样,您最终不会做出使您的代码与特定实现紧密耦合的假设.
总而言之,接口是关于抽象和契约的.通过抽象,您可以隐藏底层细节,并仅暴露您需要公开的最小值.这样,使用您的类或接口的人不会受到实现细节的负担.所有这些信息都整齐地隐藏在实现接口的特定类中.的合同保证全线标准化; 使用该接口的人确保实现该接口的所有类都公开相同的方法.
一个接口用于告诉别人一个类做了什么.
例如,如果你有一个SoccerPlayer实现的类IInjurable- 你从类代码的第一行SoccerPlayer知道,一个实例知道受伤时该做什么(你可能知道在连字符后面).
现在考虑实现IEnumerable,IQueryable或IDisposable告诉你一个对象是什么,而且不知道任何关于实现本身的东西..
看起来像很多..