yuyi
typedef enum productType {
TypeA,
TypeB,
TypeC
} productTypeTag;
class Product {
public:
virtual void show() = 0;
virtual ~Product() = 0;
};
class ProductA :public Product {
public:
void show() {
cout << "ProductA" << endl;
}
~ProductA() {
cout << "~ProductA" << endl;
}
};
class ProductB :public Product {
public:
void show() {
cout << "ProductB" << endl;
}
~ProductB() {
cout << "~ProductB" << endl;
}
};
class ProductC :public Product {
public:
void show() {
cout << "ProductC" << endl;
}
~ProductC() {
cout << "~ProductC" << endl;
}
};
class Factory {
public:
Product* createProduct(productType type) {
switch (type) {
case TypeA:
return new ProductA();
case TypeB:
return new ProductB();
case TypeC:
return new ProductC();
default:
return nullptr;
}
}
};
上面的代码示例是一个典型的工厂模式(Factory Pattern)实现,这是一种用于创建对象的设计模式,其目的是使用一个创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。
productType 枚举:
TypeA、TypeB、TypeC。这些类型用来指定工厂应该创建哪种具体的产品。抽象基类 Product:
show(),该方法用于显示产品的信息。具体产品类 ProductA、ProductB、ProductC:
Product 抽象基类,并实现了 show() 方法,分别打印不同的产品信息。Factory 类:
createProduct(productType type),它根据传入的枚举类型参数来决定创建并返回哪种具体的产品对象。Factory 类将产品的实例化逻辑封装起来,使得添加新产品时不需要修改调用方的代码。解耦:
扩展性:
隐藏创建细节:
工厂模式非常适用于以下情况:
这种模式在软件开发中非常常见,尤其是在需要根据输入或配置生成不同对象时。它帮助将对象的创建和使用解耦,使系统更易于扩展和维护。
在你提供的C++代码片段中,有一个typedef和一个枚举(enum)类型的定义。这里我们可以分析下面几个方面:
typedef 关键字typedef 是一个C和C++语言中用来给数据类型创建一个新名字的关键字。使用 typedef 可以给复杂的数据类型起一个更简单或更具描述性的名字,从而使代码更易读和易管理。
enum)枚举(Enumeration)是一个用户定义的类型,它由一组命名的整数常量组成。枚举是用来表达程序中一个变量可能有的一组固定的值。在C++中,枚举还可以有类型安全性,因为枚举不会自动转换为整数(除非显式指定)。
typedef enum productType {
TypeA,
TypeB,
TypeC
} productTypeTag;enum productType { ... }:
productType。TypeA, TypeB, 和 TypeC。这些值在程序中代表不同的产品类型,通常它们会有默认的整数值,从0开始递增。即 TypeA 默认为0,TypeB 为1,TypeC 为2。productTypeTag:
productTypeTag 是使用 typedef 给 enum productType 定义的新名字。在C++中,这使得 productTypeTag 成为一个新的数据类型名,可以用于声明变量或函数参数等。productTypeTag 作为变量的类型时,这个变量可以存储 TypeA、TypeB 或 TypeC 中的一个值。枚举类型名(productType):
枚举值(TypeA, TypeB, TypeC):
通过 typedef 定义的类型名(productTypeTag):
Tag 来表示这是一个类型标签,这是一种命名习惯,可以帮助开发者迅速识别这是一个通过 typedef 定义的类型名。这种命名方式有助于代码的清晰性和可维护性,使得代码中的数据类型和变量用途更加明确。