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 }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述