
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
定义的类型名。这种命名方式有助于代码的清晰性和可维护性,使得代码中的数据类型和变量用途更加明确。