State(状态)

21. 

21.1 定义

  当一个对象内在状态改变时允许改变行为,这个对象看起来像改变了其类型。状态模式的核心是封装,状态的变更引起行为的变动,从外部看来就好像该对象对应的类发生改变一样

21.2 优点

  ■ 结构清晰。

  ■ 遵循设计原则。

  ■ 封装性非常好。

21.3 缺点

  ■ 子类太多,不易管理。

21.4 使用场景

  ■ 对象的行为依赖于它所处的状态,即行为随状态改变而改变的场景。

  ■ 对象在某个方法里依赖于一重或多重条件分支语句,此时可以使用状态模式将分支语句中的每一个分支都包装到一个单独的类中,使得这些条件分支语句能够以类的方式独立存在和演化。如此,维护这些独立的类就不再影响到系统的其他部分。

 1 #include<iostream>
 2 using namespace std;
 3 class Channel {
 4 public:
 5     virtual void display() = 0;
 6 };
 7 class CCTV1 :public Channel {
 8 public:
 9     void display() {
10         cout << "CCTV1" << endl;
11     }
12 };
13 class CCTV2 :public Channel {
14 public:
15     void display() {
16         cout << "CCTV2" << endl;
17     }
18 };
19 class TV {
20 public:
21     static Channel* cctv1;
22     static Channel* cctv2;
23 private:
24     Channel* channel;
25 public:
26     void setChannel(Channel* channel) {
27         this->channel = channel;
28     }
29     void disCCTV1() {
30         this->setChannel(cctv1);
31         this->channel->display();
32     }
33     void disCCTV2() {
34         this->setChannel(cctv2);
35         this->channel->display();
36     }
37 };
38 Channel* TV::cctv1 = new CCTV1();
39 Channel* TV::cctv2 = new CCTV2();
40 int main() {
41     TV tv;
42     tv.disCCTV1();
43     tv.disCCTV2();
44 }

 

posted @ 2020-11-08 14:11  昨日明眸  阅读(736)  评论(0)    收藏  举报