zoukankan      html  css  js  c++  java
  • 接口回调

    //声明接口

    public interface ICallBack
    {
      void Show();
    }

    //类Student实现接口方法

    public class Student: ICallBack

    {
      public void Show()
      {
        HttpContext.Current.Response.Write(string.Format("Hi,I'm a {0}!<br/>", "Student"));
      }
    }

    //类Teacher实现接口方法

    public class Teacher: ICallBack
    {
      public void Show()
      {
        HttpContext.Current.Response.Write(string.Format("Hi,I'm a {0}!<br/>", "Teacher"));
      }
    }

    类Student、类Teacher均实现了共同的接口ICallBack,但是他们实现的方法内部各有不同。现在设想一下:在某段事务处理中需要用到接口ICallBack提供的功能(在本例中只有一个方法Show),可是又无法确定具体是需要哪个子类实现的Show方法,那么可以直接在事务中声明接口ICallBack的句柄,不用实例化。等到事务运行的时候再自动确定。看下面这段代码:

    public class ICallBackMethod
    {
      public void ICallBacks(ICallBack cb)
      {
        cb.Show();
      }
    }

    在入口进行实例化:

    protected void Page_Load(object sender, EventArgs e)
    {

      ICallBack sBack = new Student();//里氏替换原则(LSP):父类/接口指向子类的实例

      ICallBack tBack = new Teacher();

      ICallBackMethod iBack = new ICallBackMethod();
      iBack.ICallBacks(sBack);

    }

    页面显示:Hi,I'm a Student!

    在本例中,类Student继承了接口ICallBack,并且实现了接口方法Show。我们在入口实例化类ICallBackMethod,并将句柄的实例传给方法ICallBacks,这时接口句柄其实是指向类Student对象的引用,因此在方法ICallBackMethod.ICallBacks中句柄调用Show方法时,其指向Student.Show方法。这很好的解决了具体实现与事务处理的解耦。在类ICallBackMethod处理事务过程中不需要知道实现接口的子类也可以方便的扩充和维护代码,即设计模式的开闭原则(OCP:对扩展开放,对修改关闭)。上面的代码中,sBack、tBack都可以称为接口回调对象,它们虽然被声明为接口ICallBack类型,但是在实例化时却是已实现的某个子类。

    由于个人认知能力有限,请大家批评指正。

  • 相关阅读:
    php 通过二维码图片读取二维码内容
    Centos 文件系统 xfs、ext4、ext3 的区别
    js 实现省市县三级联动
    Scrapy 爬虫实战
    Mongodb 和 MySql native json 对比
    Vite —— 一种新的、更快地 web 开发工具
    解决mysql for docker容器报错:Authentication plugin 'caching_sha2_password' cannot be loaded
    Spring boot 自定义注解,Java通过反射获取注解,及注解的说明,附源码下载!
    Spring boot 自定义注解+@Aspect实现切面输出日志,附源码下载!
    HTML5 Canvas基础教程
  • 原文地址:https://www.cnblogs.com/jack-Leo/p/6215116.html
Copyright © 2011-2022 走看看