模板模式

发布时间 2023-12-11 14:20:58作者: 泽良_小涛
 1 #include <iostream>
 2 using namespace std;
 3 
 4 //PC机,手机,平板
 5 class MakeOrder {
 6 public:
 7     //virtual void startOrder() =0;第一版
 8     //钩子函数的模板方法
 9     virtual void startOrder() {
10         cout << "下订单了" << endl;
11     }
12     virtual void replyStart()=0;
13     //.....
14     virtual void finishOrder()=0;
15     virtual void replyFinish()=0;
16     //模板模式
17     void make() {
18         startOrder();
19         replyStart();
20         finishOrder();
21         replyFinish();
22     }
23 protected:
24     MakeOrder(){}
25 };
26 
27 class Fanuc :public MakeOrder {
28 public:
29     void startOrder() {
30         cout << "Fanuc开始接受订单" << endl;
31     }
32     void replyStart() {
33         cout << "Fanuc做好预备,请将后继订单进入排队" << endl;
34     }
35     //.....
36      void finishOrder() {
37          cout << "本次Fanuc订单已经完成,请推进下个订单进入生产" << endl;
38     }
39      void replyFinish() {
40          cout << "Fanuc订单信号已经送达,即将推进下个订单进入生产" << endl;
41      }
42 };
43 
44 class Sims :public MakeOrder {
45 public:
46     void startOrder() {
47         cout << "Sims开始接受订单" << endl;
48     }
49     void replyStart() {
50         cout << "Sims做好预备,请将后继订单进入排队" << endl;
51     }
52     //.....
53     void finishOrder() {
54         cout << "本次Sims订单已经完成,请推进下个订单进入生产" << endl;
55     }
56     void replyFinish() {
57         cout << "Sims订单信号已经送达,即将推进下个订单进入生产" << endl;
58     }
59 };
60 
61 class Mits :public MakeOrder {
62 public:
63     
64     void replyStart() {
65         cout << "Sims做好预备,请将后继订单进入排队" << endl;
66     }
67     //.....
68     void finishOrder() {
69         cout << "本次Sims订单已经完成,请推进下个订单进入生产" << endl;
70     }
71     void replyFinish() {
72         cout << "Sims订单信号已经送达,即将推进下个订单进入生产" << endl;
73     }
74 };
75 
76 int main(void) {
77     //MakeOrder* pMakeOrder = new Fanuc;
78     //pMakeOrder->make();
79     MakeOrder* pMakeOrder = new Mits;
80     pMakeOrder->make();
81     system("pause");
82     return 0;
代码示例