添加自定义事件的封装，采用观察者模式