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 }
运行结果:
原文链接: https://www.cnblogs.com/couhujia/archive/2012/12/11/2812233.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/72193
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!