您的位置:首页 > 房产 > 建筑 > 大学生dw网页设计作业_深圳高端女装品牌_seo网站编辑是做什么的_windows优化

大学生dw网页设计作业_深圳高端女装品牌_seo网站编辑是做什么的_windows优化

2024/12/23 15:14:48 来源:https://blog.csdn.net/qq_49443542/article/details/143358355  浏览:    关键词:大学生dw网页设计作业_深圳高端女装品牌_seo网站编辑是做什么的_windows优化
大学生dw网页设计作业_深圳高端女装品牌_seo网站编辑是做什么的_windows优化

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

    • C++中抽象工厂模式(Abstract Factory)详解
      • 一、引言
      • 二、定义
      • 三、结构
      • 四、使用示例
      • 五、优点
      • 六、缺点
      • 七、应用场景
      • 八、总结

C++中抽象工厂模式(Abstract Factory)详解

一、引言

在面向对象编程中,设计模式是解决问题的最佳实践。抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的单个工厂,而不需要指定它们的具体类。该模式允许客户端使用抽象的接口来创建一系列相关或依赖的对象,而无需关心具体的实现细节。本文将详细介绍C++中的抽象工厂模式,包括其定义、结构、优点、缺点以及应用场景。

二、定义

抽象工厂模式定义了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。该模式主要由四个部分组成:抽象工厂、具体工厂、抽象产品和具体产品。

  1. 抽象工厂(Abstract Factory):声明一个用于创建对象的接口。
  2. 具体工厂(Concrete Factory):实现抽象工厂接口,创建具体产品的实例。
  3. 抽象产品(Abstract Product):声明产品的接口。
  4. 具体产品(Concrete Product):实现抽象产品接口,是具体工厂创建的对象。

三、结构

以下是抽象工厂模式的典型结构:

// 抽象产品:汽车
class Car {
public:virtual void drive() = 0;virtual ~Car() {}
};// 具体产品:SUV
class SUV : public Car {
public:void drive() override {std::cout << "Driving SUV car." << std::endl;}
};// 具体产品:轿车
class Sedan : public Car {
public:void drive() override {std::cout << "Driving sedan car." << std::endl;}
};// 抽象产品:手机
class Phone {
public:virtual void call() = 0;virtual ~Phone() {}
};// 具体产品:安卓手机
class AndroidPhone : public Phone {
public:void call() override {std::cout << "Making a call with Android phone." << std::endl;}
};// 具体产品:苹果手机
class IPhone : public Phone {
public:void call() override {std::cout << "Making a call with iPhone." << std::endl;}
};// 抽象工厂
class AbstractFactory {
public:virtual Car* createCar() = 0;virtual Phone* createPhone() = 0;virtual ~AbstractFactory() {}
};// 具体工厂1:生产SUV和安卓手机
class ConcreteFactory1 : public AbstractFactory {
public:Car* createCar() override {return new SUV();}Phone* createPhone() override {return new AndroidPhone();}
};// 具体工厂2:生产轿车和苹果手机
class ConcreteFactory2 : public AbstractFactory {
public:Car* createCar() override {return new Sedan();}Phone* createPhone() override {return new IPhone();}
};

四、使用示例

以下是如何使用抽象工厂模式的示例代码:

int main() {// 使用具体工厂1创建SUV和安卓手机AbstractFactory* factory1 = new ConcreteFactory1();Car* suv = factory1->createCar();Phone* androidPhone = factory1->createPhone();suv->drive();androidPhone->call();delete suv;delete androidPhone;delete factory1;// 使用具体工厂2创建轿车和苹果手机AbstractFactory* factory2 = new ConcreteFactory2();Car* sedan = factory2->createCar();Phone* iPhone = factory2->createPhone();sedan->drive();iPhone->call();delete sedan;delete iPhone;delete factory2;return 0;
}

五、优点

  1. 分离具体的实现:客户端代码通过接口操作实例,不依赖于具体的类实现。
  2. 易于交换产品系列:因为具体工厂类在一个应用中只需要在初始化的时候出现一次,这使得改变一个应用的具体工厂变得十分容易。
  3. 增加新的产品系列容易:扩展新的产品族比较方便,符合开闭原则(对扩展开放,对修改关闭)。

六、缺点

  1. 难以支持新种类的产品:一旦工厂类中定义好了创建产品的方法后,如果需要添加新产品就不容易,因为抽象工厂接口确定后不容易修改。
  2. 复杂度增加:随着产品族的增加,相关的具体工厂和产品类的数量也会增加,这会使系统更加复杂。

七、应用场景

  1. 系统独立于如何创建、组成和表示它的产品:系统应该对产品类的实现细节和创建过程无需了解。
  2. 系统需要多个产品系列中的一个来配置:可以动态地更改产品系列。
  3. 系统需要提供产品库的类,且只想显示它们的接口而不是实现

八、总结

抽象工厂模式是一种强大的设计模式,它允许我们在不修改客户端代码的情况下,通过更换具体工厂来改变系统的行为。然而,该模式也增加了系统的复杂度和代码量,因此在选择使用时应谨慎考虑。合理地使用抽象工厂模式,可以显著提高代码的可读性、可维护性和可扩展性。


在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com