项目中的设计模式【工厂方法模式】
摘要:项目应用场景:协议本身只是载体,经过网络发送数据,协议可能打包成xml也可能打包成json等其他格式,协议的字段和打包解包要分离,应用程序只关心协议的字段,而底层网络库,发送数据的时候,需要打包解包,要知道对应的打包解包子类。怎么解决这个问题?建立工厂方法,根据协议的cmd对应打包解包子类。
阅读全文
posted @
2015-06-27 20:32
Andy Niu
阅读(252)
推荐(0) 编辑
项目中的设计模式【适配器模式】
摘要:项目应用场景:我们的服务会接入不同的设备,比如大华设备,海康设备,这些设备sdk的接口不同。需要根据不同的设备类型进行适配。下层有适配器管理器和一组适配器,服务告诉适配器管理是哪一种设备,适配器管理器创建出一个适配器。这个odbc的道理一样。odcb可以认为是适配器管理器,mysql的odbc驱动是...
阅读全文
posted @
2015-06-27 20:31
Andy Niu
阅读(335)
推荐(0) 编辑
项目中的设计模式【观察者模式】
摘要:项目应用场景:dmu会从设备收到告警,不可能全部都传给客户端,因为网络压力太大。采取的策略是:客户端订阅,dmu才发送。为了进一步减少网络开销,订阅的策略是订阅的范围尽可能小,订阅的时间尽可能短。查看一个设备,只订阅一个设备,进入页面订阅,离开页面取消订阅。
阅读全文
posted @
2015-06-27 20:30
Andy Niu
阅读(400)
推荐(0) 编辑
项目中的设计模式【单例模式】
摘要:项目应用场景:配置文件的信息和数据库中的数据,这些数据只有一份,并且多个线程共享,记录在DataCenter,DataCenter是一个单例类。
阅读全文
posted @
2015-06-27 20:29
Andy Niu
阅读(222)
推荐(0) 编辑
原型模式
摘要:解决的问题:当前线程定时对集合中的元素,遍历执行一次操作,而在遍历的过程中,其他的线程可能会增删元素,这样的话,就会导致foreach的内部状态发生变化,出现异常。解决办法:定时器每次执行的时候,对集合做一个拷贝,对这个拷贝遍历。其他线程还是对原来的集合做增删操作,不会相互影响。而且即使其他线程,做了增删操作,在定时器也会对所有元素都会执行。
阅读全文
posted @
2013-09-09 10:57
Andy Niu
阅读(265)
推荐(0) 编辑
单例模式
摘要:解决的问题:对于站场图中的设备,一类设备的Updater类是相同的,也就是说,对于所有的信号机,都是同一个Updater。解决办法:使用单例模式,所有的信号使用同一个Updater。
阅读全文
posted @
2013-09-09 10:46
Andy Niu
阅读(194)
推荐(0) 编辑
适配器模式
摘要:解决的问题:站场图中每个设备都有一个Id属性,使用TextBlock来显示文字,但是TextBlock没有Id属性。解决办法:创建一个类,继承TextBlock,并且增加一个Id属性。这里其实用到的是,类的适配器模式(继承方式)。当然也可以使用对象的适配器模式(委托方式)。
阅读全文
posted @
2013-09-09 10:05
Andy Niu
阅读(158)
推荐(0) 编辑
门面模式
摘要:解决的问题:原先做了上位机界面,根据下位机的数据,更新显示。现在其他项目组,也要用到同样的功能。因此需要做成一个DLL,给他们调用。但是这个DLL中涉及到很多的东西。解决方法:使用门面模式,做成一个门面类,对外暴露接口。在门面类的接口内部,委托相关的类执行操作。
阅读全文
posted @
2013-09-07 16:41
Andy Niu
阅读(290)
推荐(0) 编辑
观察者模式
摘要:解决的问题:界面上有一些计时器控件(每个控件都有自己的Number),每个计时器每秒钟减1,当为0的时候消失;解决方法:1、建立接口ICount,有个Count方法;2、计时器控件实现接口ICount;3、建立CountManager类,统一管理这些计时器控件,使用Attach,Detach方法增加删除计时器控件;4、CountManager初始化一个计时器,每秒执行一次,遍历计时器控件,每个减1。注意事项:在foreach的语句中,不能对集合增删元素,也不能使元素指向其他对象,可以修改元素的内容。在这里遍历计时器控件的时候,考虑到其他线程会对集合增删元素,或者使元素指向其他对象,foreac
阅读全文
posted @
2013-09-07 16:31
Andy Niu
阅读(334)
推荐(0) 编辑