C++数据封装模式探索:简单工厂与工厂方法

需积分: 9 7 下载量 7 浏览量 更新于2024-07-31 收藏 114KB PDF 举报
"C++数据封装模式的两种实现方式——简单工厂模式和工厂方法模式的代码示例" 在C++编程中,数据封装是面向对象编程的四大特性(封装、继承、多态、抽象)之一,它有助于提高代码的可维护性、安全性和模块化。这里我们将探讨两种使用C++实现数据封装的模式:简单工厂模式和工厂方法模式。 **简单工厂模式** 简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。在这个例子中,我们定义了一个抽象类`CAnimal`,它有一个虚函数`Cry()`,表示动物的叫声。接着,我们创建了两个具体类`CFish`和`CBird`,它们分别继承自`CAnimal`并实现了各自的`Cry()`方法。 `CFactory`类是工厂类,它负责根据传入的标志(`Flag`)返回不同的动物对象。通过这个工厂类,我们可以将对象的创建过程与使用过程解耦,增强了代码的灵活性。在`main()`函数中,我们创建`CFactory`对象,并调用其`CreateObj()`方法来动态创建`CBird`或`CFish`对象,然后调用这些对象的`Cry()`方法。 **工厂方法模式** 工厂方法模式比简单工厂模式更加灵活,它将对象实例化的责任委托给子类。在这个例子中,除了基本的结构与简单工厂模式相同外,我们引入了工厂类的抽象基类`CAnimalFactory`,它有一个纯虚函数`CreateAnimal()`用于创建动物对象。然后,我们创建了两个具体的工厂类`CFishFactory`和`CBirdFactory`,它们分别继承自`CAnimalFactory`并实现了`CreateAnimal()`方法,返回`CFish`或`CBird`对象。 在`main()`函数中,我们不再直接使用一个单一的工厂类,而是根据需要创建相应的具体工厂对象,然后通过工厂对象的`CreateAnimal()`方法获取动物实例。这种方式使得系统在不修改原有代码的情况下,能够增加新的动物类型,符合开闭原则。 这两种模式都是数据封装的体现,因为它们都隐藏了对象创建的细节,客户端只需知道如何使用动物对象,而不必关心它们是如何被创建的。这种封装使得代码更加模块化,降低了依赖性,提高了可扩展性。在实际开发中,选择使用哪种模式取决于项目需求和代码复杂度。