前些天一直在看buiw,对buiw有了一些了解,后来在同事的推荐下看了设计模式,发现buiw运用了很多设计模式,先就将自己知道的做一个总结。
Chain of responsibil (职责链):使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合度,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
以上是在设计模式中对职责链的解释,在buiw中的表现最明显的就是事件的处理,首先事件在RootForm去处理,RootForm先将事件交给自己的控件处理,这些控件中又包含了很多子控件,首先子控件去处理,处理完之后返回,如果返回false则父控件要继续去处理,否则直接返回,控件处理完之后再交给Form去处理,等等,事件就这样一个一个接着一个的传,直到返回true为止。这种处理方式不就正好是职责链的模式吗。
Adept(适配器):适配器从其表面去看就是去做适配,所谓适配就是把原本不相配的两个东西通过适配联系起来,这就是适配,这在buiw中也是非常重要的,buiw也使用了MVC模型,也就是数据和显示分开,那怎样数据和显示分开呢,适配就在这里起作用了,在List显示的时候,数据就要和显示分开,给数据添加一个监听,当数据发生变化的时候调用适配器,适配显示的数据发生相应的变化。
Observe(观察者):定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。
大家看这个定义是不是和Listener很像呢,在Buiw中也用到了Listener,用Listener来监听对象的变化,最多的还是现实的变化,当现实发生变化的时候通知和其相关数据也要跟着变化,比如在List显示的时候如果焦点发生变化了,可能焦点变化了需要做一些动作,那就可以添加一个Listener,当焦点变化的时候监听其特有的事件。
Decorator(装饰):动态地给一个对象添加一些额外的职责。在Buiw中本身就有Decorator这样一种结构,很多都是从Decorator中继承的,比如ScrollWidget,Border等等,都是从Decorator中继承的,正如定义所说,它就起了一个装饰的作用。比如ScrollWidget可以修饰一个List,让它具有滚动条的功能。
Facade(外观模式):为子系统中的一组接口提哦那个一个一致的界面。其实在brew中很多地方都用了这种模式,举一个例子就是IImage接口,其实对于图片有很多种格式例如:jpg,bmp,png,但是brew值提供了一个统一的接口,例如IImage_draw,去画一张图片,不管这张图片是什么格式只要调用它就可以了,其实这个接口也是去调用了不同格式图片的draw函数。这就是接口的统一,用户不同关心图片的类型一样可以把图片显示出来,很方面。
template Method(模板方法):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。这个比较典型的就是WIdgetBase了,所以得Widget都是以WIdgetBase为模板的,在各个子类的widget中去实现相应的函数。
也许在Buiw中还用了其他的一些设计模式,只是我了解的设计模式太少,如果以后再有什么新的心得,那再补充好啦^_^。