MFC是基于任何设计模式,如果是这样的设计模式?

时间:2010-03-18 10:52:36

标签: design-patterns mfc

MFC是基于任何设计模式,如果是这样的设计模式??

3 个答案:

答案 0 :(得分:7)

MFC和设计模式

众所周知,MFC是C ++程序员使用的流行类库之一。 MFC背后的成功故事是MFC开发人员采用的类架构和设计原则,使其成为广受欢迎的重用库之一。

主要关注的是如何在MFC中使用模式。我们将在MFC库中看到三种模式的使用。

Creational:Singleton Pattern

任何MFC应用程序的第一步是创建应用程序对象(从CWinApp派生的类的对象)。在MFC应用程序的实例中应该只有一个应用程序对象。 CWinApp旨在确保给定实例中仅存在应用程序对象。 CWinApp及其后代称为Singleton Classes。一个类(CWinApp或其后代)在给定时间确保其类型的最多一个对象,并为此对象提供全局访问点(AfxGetApp()方法)是Singleton类。

由于这个原则被反复应用以解决重复出现的对象“创造性”问题,这就变成了一种模式。 Singleton Pattern确保一个类只有一个实例并提供一个全局访问点。使用Visual C ++创建单例对象的文章讨论了实现单例的不同方法。

结构:桥梁模式

Bridge Pattern就是将抽象(接口)与其实现分离,以便两者可以独立变化。在MFC中,向/从持久性机制(如文件)存储/检索对象的过程称为序列化。 MFC使用Bridge Pattern实现序列化。 CArchive和CFile类实现对象序列化。 CArchive类提供了用于向/从持久性机制写入/读取对象的接口,而CFile及其子类为不同的持久性机制(如内存,磁盘文件,套接字等)提供了实现。

CArchive对象在构造过程中配置了类CFile(或派生类)的对象,从中获取序列化所需的信息,包括所请求操作的文件名和类型(读或写)。执行序列化操作的客户端可以使用CArchive对象,而不考虑CFile类实现的持久性机制。

文章Bridge Pattern - 详细阐述了关于Bridge模式的Interface和Implementation之间的差距。

行为:观察者模式

观察者模式旨在“定义对象之间的一对多依赖关系,以便当一个对象更改状态时,将自动通知和更新其所有依赖关系”。受到更改的对象称为Subject,依赖于Subject的状态的对象称为Observer。

MFC使用观察者模式的文档/视图变体。 MFC着名的文档/视图架构使用此变体。文档包含数据对象并充当主题。视图是一个窗口对象,用户通过该窗口对象更新文档,并充当观察者。文档可以有多个视图。只要其中一个视图更改了文档中的数据,它就会通过调用UpdateAllViews方法更新文档,并提供有关修改的可选提示。为了通知其他视图的更改,文档对象为附加到其上的每个视图调用OnUpdate方法(除了调用UpdateAllViews的视图)。派生视图类可以覆盖OnUpdate方法,并通过查询文档中的数据来更新自己。

答案 1 :(得分:1)

答案 2 :(得分:1)

很长一段时间没有对MFC进行编码,但在我认为Document-View pattern是“默认”的日子里。