class ConcreteCreator1 : public Creator { /** * Note that the signature of the method still uses the abstract product type, * even though the concrete product is actually returned from the method. This * way the Creator can stay independent of concrete product classes. */ public: Product* FactoryMethod() const override { return new ConcreteProduct1(); } };
时间: 2024-04-18 19:30:42 浏览: 106
这段代码定义了一个名为 "ConcreteCreator1" 的类,它公开继承自抽象基类 "Creator"。
在 "ConcreteCreator1" 类中,我们重写了基类中的虚函数 "FactoryMethod"。这个函数的返回类型是抽象产品类型 "Product*",尽管实际上返回的是具体产品 "ConcreteProduct1" 的指针。
通过这种方式,"ConcreteCreator1" 类保持了与具体产品类的独立性,它只与抽象产品类 "Product" 进行交互。这符合设计模式中的工厂方法模式,即创建者类负责定义创建对象的接口,具体的对象创建由派生类实现。
在 "FactoryMethod" 中,我们使用关键字 "new" 创建了一个 "ConcreteProduct1" 类的对象,并将其地址返回。这样,通过调用 "FactoryMethod" 函数,我们可以在运行时动态地创建具体产品对象,并将其作为抽象产品类型返回。
这种工厂方法模式的设计允许我们灵活地添加新的具体创建者和具体产品类,同时保持了代码的可扩展性和可维护性。
相关问题
Creator* creator = new ConcreteCreator1(); ClientCode(*creator);
这段代码创建了一个指向 "ConcreteCreator1" 类对象的指针 "creator",并将其作为参数传递给 "ClientCode" 函数。
首先,通过关键字 "new" 创建了一个 "ConcreteCreator1" 类对象,并将其地址赋值给 "creator" 指针。
接下来,使用解引用操作符 "*",将指针 "creator" 解引用为一个具体的对象,并将该对象传递给 "ClientCode" 函数进行处理。
在 "ClientCode" 函数中,通过传入 "creator" 对象,我们可以调用其成员函数并执行相应的操作。这种方式允许客户端代码使用抽象的 "Creator" 类,并在运行时决定具体的创建者类对象。
这个代码片段展示了面向对象设计中的多态和依赖倒置原则。通过使用基类指针和虚函数,我们可以实现运行时多态性,并且客户端代码可以与抽象接口进行交互,而不需要直接依赖于具体的实现类。这提供了更高的灵活性和可扩展性。
阅读全文