js对象管理基于事件驱动

接上一篇,公司造了一栋大别野,大别野门口有个警报器,有个喷泉,还有个大灯。

var   fountain;

var  annunciator;

var  light;

需求:

警报器 喷泉  大灯 状态联动:

打开大灯时   警报器 关闭  喷泉打开

打开警报器时   大灯关闭   喷泉关闭

打开喷泉时   大灯打开  警报关闭

白天  大灯不能打开

=================

喷泉、灯、警报器的方法合计

fountainStrat();

fountainStop();

annunciatorStart();

annunciatorStop();

lightStart();

lightStop();

===================

此外还需要一个方法 判断是否为白天

isDay();

实现三者的联动,常规模式下,给每个对象添加start,stiop 方法,会比较麻烦,并且维护扩展性能较差,可以使用基于状态驱动。

我们先定义一个状态量:

var state:

三个对象的状态  根据 state来改变

新建统一入口函数

function sendMsg(state){

}

无论 灯,喷泉,警报器那个改变 都只改变  state  发送消息事件 sendMsg(state)

添加  灯,喷泉,警报器 控制器

changefountain(msg){

if(msg==true){ 

                      fountainStrat();

                     } else{

                      fountainStop();

                      }

}

changeannunciator(msg){

                  if(msg==true){

                        annunciatorStart();

                            } else{

                       annunciatorStop();

                          }

 }

changelight(msg){

                 if(msg==true){

                 lightStart();

                 } else{

               lightStop();

             }

}

改造 sendMsg()函数。

如下,

function sendMsg(state){

         changefountain(msg);

         changeannunciator(msg);

         changelight(msg);

}

基于状态的驱动,不论三个对象那个改变都只是改变状态值,状态值改变后,使用统一的函数发送状态值到控制器里。控制器根据状态做出响应。

这样的话要修改 联通效果只需要修改某一个控制器就可以,比如灯泡白天不亮在灯泡控制器中添加时间判断

changelight(msg){

        if(isDay()){

console.log('it's day time')

}else{

         if(msg==true){

           lightStart();

             } else{

                lightStop();

         }

   }

}

响应与事件分离。


若要添加或者删除一级关联的话  则去改造sendMsg

function sendMsg(state){

changefountain(msg);

changeannunciator(msg);

//changelight(msg);  // 注释掉灯光控制器 则灯光不在联动

}

想要控制灯 最晚时间加入联动 则只需要改变isDay()函数。

=======================

本文完成:没有最好的模式,只有最合适的模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,109评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,865评论 0 6
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,788评论 0 9
  • 这是一个测试 这是一个测试 这是一个测试
    郝萌阅读 574评论 1 1