zoukankan      html  css  js  c++  java
  • 委托的设计思想

    委托的设计思想

    上一文中,我们简单的了解了一下,委托的机制,那么本文我们来了解一下委托的设计思想。

    Overview

    我想你已经体验到了委托带来的好处,试想一下,这么好用的东西,其他编程语言中肯定也有类似的东西,毕竟天下文章一大抄..呃 口胡。如果你是有过Android开发经验的,我想你肯定对Android中各种各样的Listener十分深刻,Android中的Listener就是一种类似我们C#委托的东西,在Java中被称为 回调函数

    Java的回调机制

    Java 中的回调机制,是通过传递接口来实现的,下面我们来看一看。设想下面的这么一种情况: 有一个Person类 ,其中有一个方法叫做introduce 方法,来介绍自己,当介绍完成之后,执行一个方法来告诉系统已经介绍完毕。

    建立一个用来通知系统,Person已经介绍完毕的接口。

    public interface IntroducedCallBack {
        void Introduced(Person person);
    }
    

    Person类

    import javax.annotation.processing.SupportedSourceVersion;
    
    public class Person {
        private String name;
    
        private int age;
    
        private String gender;
    
      public Person(String name, int age, String gender) {
            super();
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        
        /**
         * 该person 介绍自己的方法
         * @param callBack 当介绍完自己后的回调方法
         * */
        public void introduce(IntroducedCallBack callBack) {
            System.out.println("My name is " + this.name + "I am " + age + "years old. I my a " + gender);
            if (callBack != null)
                callBack.Introduced(this);
        }
    }
    
    

    进行调用

    public class Program {
        public static void main(String[] args) {
            Person person = new Person("鲁迅认识的那只猹", 18, "Male");
            person.introduce(new IntroducedCallBack() {
                @Override
                public void Introduced(Person person) {
                    System.out.println("好的!"+person.getName() +" 系统收到了你的介绍!");
                }
            });
        }
    }
    

    最后的输出结果为

    My name is 鲁迅认识的那只猹I am 18years old. I my a Male
    好的!鲁迅认识的那只猹系统受到了你的介绍!
    

    分析

    我们在 person 调用 introduce 方法的时候,传递了我们的实例化后的接口,在这里通过接口的方式完成了类似C#委托机制的功能 Person 类 调用了 Program类的方法 。可能你并没有学过Java但是我想上面的代码同样可以被轻易的理解,毕竟这两个语言是非常相似的。

    结语

    如果你学过设计模式,我想是你一定在上面的代码中看到了 发布-订阅 设计模式的影子,可能在这里并不是很明显,毕竟这个例子的代码太少了。 C#中委托的设计借鉴了发布订阅模式的思想,在C#没有委托之前,我们实现 发布-订阅 设计模式的时候,也是通过接口来实现的,但是有了委托之后,C#可以通过多播委托来实现发布订阅设计模式。关于多播委托下文会有详细的介绍。

  • 相关阅读:
    关于机器学习系统的方向
    图像去雾
    中国九十年代摇滚
    matlab 将数字矩阵转换成图像
    vue-router路由守卫ie浏览器下报错问题解决
    vue:index.html、main.js、app.vue
    vue关于for循环
    element-ui表单校验
    记录vue组件引入components两次的后果
    vue组件通信
  • 原文地址:https://www.cnblogs.com/slyfox/p/7511929.html
Copyright © 2011-2022 走看看