• 状态模式


      1 #include "stdio.h"
      2 #include "stdlib.h"
      3 
      4 // 程序员有三种行为:吃饭,睡觉,写代码。
      5 // 程序员有两种状态:生病,健康
      6 class Status
      7 {
      8 public:
      9     virtual void eat() = 0;
     10     virtual void sleep() = 0;
     11     virtual void writeCode() = 0;
     12 };
     13 
     14 // 生病状态
     15 class IllStatus :public Status
     16 {
     17 public:
     18     virtual void eat()
     19     {
     20         printf("小二,来一碗米饭,来一杯热水
    ");
     21     }
     22     virtual void sleep()
     23     {
     24         printf("翻来覆去睡不着~~~
    ");
     25     }
     26     virtual void writeCode()
     27     {
     28         printf("老大,你饶了我,不想写代码...
    ");
     29     }
     30 };
     31 
     32 // 健康状态
     33 class HealthStatus :public Status
     34 {
     35 public:
     36     virtual void eat()
     37     {
     38         printf("小二,来两碗米饭,在来一瓶牛栏山
    ");
     39     }
     40     virtual void sleep()
     41     {
     42         printf("呼呼~~~
    ");
     43     }
     44     virtual void writeCode()
     45     {
     46         printf("hello,world!
    ");
     47     }
     48 };
     49 
     50 // 程序员
     51 class Programmer
     52 {
     53 public:
     54     Programmer()
     55     {
     56         m_pStatus = m_pHealthStatus; // 程序员出来的时候是健康的
     57     }
     58 public:
     59     void eat()
     60     {
     61         m_pStatus->eat();
     62     }
     63     void sleep()
     64     {
     65         m_pStatus->sleep();
     66     }
     67     void writeCode()
     68     {
     69         m_pStatus->writeCode();
     70     }
     71     void setStatus(Status *s)
     72     {
     73         m_pStatus = s;
     74     }
     75     Status* getStatus()
     76     {
     77         return m_pStatus;
     78     }
     79     Status* getIllStatus()
     80     {
     81         return m_pIllStatus;
     82     }
     83     Status* getHealthStatus()
     84     {
     85         return m_pHealthStatus;
     86     }
     87 private:
     88     static Status* m_pIllStatus;//生病状态
     89     static Status* m_pHealthStatus;//健康状态
     90     Status* m_pStatus; // 记录程序员的状态
     91 };
     92 // 这里设置静态的原因是程序员不可能只有一个,所有的程序员共享这两种状态,可以节约内存开销
     93 Status* Programmer::m_pIllStatus = new IllStatus;
     94 Status* Programmer::m_pHealthStatus = new HealthStatus;
     95 
     96 // 模式说明:同一事物的不同状态会有不同的行为结果。对象看起来像是修改了类,实际上只是改变了对象的状态
     97 int main()
     98 {
     99     Programmer p;
    100     printf("
    ----- 健康状态 ----
    ");
    101     p.eat();
    102     p.sleep();
    103     p.writeCode();
    104 
    105     printf("
    ----- 生病状态 ----
    ");
    106     p.setStatus(p.getIllStatus());
    107     p.eat();
    108     p.sleep();
    109     p.writeCode();
    110     system("pause");
    111     return 0;
    112 }
  • 相关阅读:
    C#中在AxWebBrowser控件注入JS脚本的方法
    C# 操作鼠标移动到指定的屏幕位置方法
    uvm的sequence
    uvm学习杂记
    形参和实参
    gvim中对变量的识别
    验证环境中的program为什么必须是automatic
    FIFO设计验证经验谈
    AMBA总线基础知识简介
    systemverilog中module与program的区别
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/3596465.html
Copyright © 2020-2023  润新知