电力系统设计中控制工程网版权所有,一个系统工程通常采用C/S方式,一般使用瘦客户端,Com或者DCOM 服务以及相应的数据库,而在客户端少有固定方法,而MVC(Model/View/Controller)是一种比较通用的设计模式,它很好的实现了数据层与表示层、表示层与控制层的分离,所谓的MVC 指用类的模型/视图/控制器三元组来构建用户界面。
MVC 包括三类对象,模型Model是应用对象,视图View 是它在屏幕上的表示,控制器Controller定义用户界面对用户输入的响应方式,VC 中使用的MFC 类库主要采用了这种模型,即文档/视图/框架。一般用户界面往往将这些对象混在一起,而MVC则将他们分离以提高灵活性和复用性。 或许你经常使用VC的单文档(SDI)和多文档(MDI)设计程序,而更深入了解这种模型,会更有利于开发。把显示的数据存放于文档而不是全局对象。而在java、C#这种纯面向对象语言中MVC 模式早已深入人心。
视图必须保证它的显示正确地反映了文档的状态。一旦文档的数据发生
MVC 的特征使得一个对象改变可以影响另一些对象,而这个对象并不知道那些被影响的对象的细节,减少了对象之间的耦合,这种设计通常被描述成Observe模式。另一个特征是可以嵌套www.cechina.cn,用户界面可以由嵌套的视图构成,即Composite 模式。MVC还可以在不改变视图外观情况下改变视图对用户输入的响应方式。View 使用Controller 子类的实例来实现一个特定的响应策略。View-Controller 是Strategy 模式的一个例子。
当然MVC 还使用了其他的设计模式,如:用来指定视图缺省控制器的Factory Method 、实现滚动视图的Decorator 模式,单文档的Singleton等等。但主要关系还是由Observe、Composite 和 Strategy 三个设计模式给出的。下面简单介绍一下这三种模式,由于c++ 不是一种纯面向对象语言,这里使用了微软的 Managed C++。
1. OBSERVER(观察者) 这样解决了目标和观察者之间的抽象耦合。一个目标(或者说文档)所知道的仅仅是它有一系列的观察者(视图),每个符合Observe 类的简单接口,即有用于自己更新的Updata()函数。目标不需要知道观察者属于那个具体的类。 支持广播通信,目标发送信息不需要知道他的接收者。通知被自动广播给所有的登记对象 意外的更新,一个观察者不需要知道其他观察者的存在,可以更新所有依赖于目标的观察者。 目标mengDoc(文档) 实现了 Attach 添加 View 和 Detach 删除,以及消息通知UpdateAllViews(),并有保持状态信息的成员isModified,观察者 mengView (视图)实现了Update()函数,能够修改目标对象,使其他观察者同时更新。 很多开发工具基本都提供了窗体如VB、Delphi、QT等,这些窗体都能够组合其他控件或者窗体本身CONTROL ENGINEERING China版权所有,所有没有基于操作系统实现这个模型。而是直接从.Net 库的Form派生出来。 3. Strategy(策略)
意图:定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。
2. COMPOSITE(组合)
意图:将对象组合成树型结构,以表示部分-整体的结构。Composite 使得用户对单个对象和组合对象使用具有一致性
意图:定义一系列算法控制工程网版权所有,把他们封装起来,并且使它们可以互相替换。本模式使得算法可独立于使用它的客户(视图)而变化。