factory mothed pattern--工厂方法模式

factory mothed pattern,称工厂方法模式

首先我们看看Gof怎么定义工厂方法模式的:

“Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.”  - GoF

"为创建一个对象而定义一个接口,让子类决定哪个类实例化,工厂方法模式使类的实例化延迟到子类"-GoF

抽象工厂(AbstractFactory)     是工厂方法模式的核心。具体工厂必须实现在抽象工厂中定义的抽象方法。

具体工厂(ConcreteFactory)   实现抽象工厂中定义的所有抽象方法,包含与业务密切相关的逻辑。

抽象产品(AbstractProduct)     所有具体产品的超类,亦即具体产品的共同父类。

具体产品(ConcreteProduct)   这个角色实现了抽象产品角色所定义的接口。

在C++中,其实就是运用的C++多态性质。
实例:
一个工厂生产奔驰轿车,一个工厂生成奥迪轿车,同时要进行测试。
复制代码
 1 class Car
 2 {
 3     public:
 4         virtual void run( )=0;
 5 };
 6 
 7 class AudiCar:public Car
 8 {
 9     public:
10         void run( );
11 };
12 void AudiCar::run( )
13 {
14         std::cout<<"Audi is running"<<std::endl;
15 } 
16 
17 class BenzCar:public Car
18 {
19     public:
20         void run( );
21 }
22 void BenzCar::run( )
23 {
24         std::cout<<"Benz is running"<<std::endl;
25 };
26 
27 class CarFactory
28 {
29     public:
30        virtual Car * createCar( )=0;
31 };
32 
33 class AudiCarFactory:public CarFactory
34 {
35     public:
36         Car * createCar( );
37 };
38 Car * AudiCarFactory::createCar( )
39 {
40         return new AudiCar( );
41 }
42 
43 class BenzCarFactory:public CarFactory
44 {
45     public:
46         Car * createCar( );
47 };
48 Car* BenzCarFactory::createCar( )
49 {
50         return new BenzCar( );
51 }
52 
53 void createAndTest(CarFactory* p)
54 {
55     car* c=p->createCar( );
56     c->run( );
57     delete c;
58 }
59 
60 int main (int argc,char* argv)
61 {
62     CarFactory * p1 =new BenzCarFactory( );        //由子类决定实例化对象
63     CarFactory * p2 =new AudiCarFactory( );
64     createAndTest(p1);
65     createAndTest(p2);
66     delete p1;
67     delete p2;
68     return 0;
69 }
复制代码

 

运行结果:

posted @   胡佳180815  阅读(1447)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示