zoukankan      html  css  js  c++  java
  • 接口型模式的序幕:接口和委托

            接口是某些方法和字段构成的一个集合。一个接口中可以不声明任何方法和字段,也可以声明多个方法和字段,但它永远不能实例化。当一个类实现了一个接口,它就要实现接口中的所有方法,如果这个类没有做到这点,那么这个类是不能实例化的。当一个类实现了一个接口,其它类的对象就能通过这个接口对类进行访问。一个类可以实现多个接口,当然,一个接口也可以为多个类所实现。
            从功能上来说,委托和接口是比较相似的。其实委托最常见的应用是传统C或C++程序员会使用函数指针的情况。也就是说,委托与函数指针类似,它可以把函数的引用和实现分离开,允许实现作为独立的模块存在。与接口相比,委托有一个优势,使得它的使用比接口更加灵活,那就是委托可以很容易的链接到一起,也就是允许多个委托组合成一个委托链。我们可以用“+=”和“-+”轻松地做到。当然我们在需要地时候还可以手工迭代委托链。比如下面一段代码:
    Delegate [] examples = Fxb.GetInvocationList();
    foreach(Delegate f in examples)
    {
       f.DynamicInvoke(args);
    }
            这段代码是调用委托地GetInvocationList方法检索委托实例的列表,并返回一个System.Delegate对象数组,这些对象构成委托链。这样写有些好处,比如可以用来引发异常,还可以查看委托链中每个方法的值。委托既可以与静态方法关联,也可以与非静态方法相关联,只要先提供此类的一个特定实例即可。
            委托说了半天,继续回头说接口。接口中可以有属性,方法,甚至可以有事件(event),但就是不能包含委托,因为委托是一个类型。我们在接口中使用属性也是很重要的一点,因为这会方便客户使用反射检测并了解实现了这个接口的类的行为。
            其实序幕里应该讲讲UML的,但本人比较懒,也就略过了,反正也不是很难的东西,在模式的学习中对UML有个了解也就够了。
  • 相关阅读:
    如何在自定义端口上运行 Spring Boot 应用程序
    如何重新加载Spring Boot 上的更改,而无需重新启动服务器
    JavaConfig
    常用的linux指令
    接口绑定有几种实现方式,分别是怎么实现的?
    JDK,JRE,JVM三者关系
    final finally finalize区别
    execute,executeQuery,executeUpdate的区别是什么?
    相对于Statement,PreparedStatement的优点是什么?
    JDBC访问数据的基本步骤是什么
  • 原文地址:https://www.cnblogs.com/fxb248/p/378583.html
Copyright © 2011-2022 走看看