代理模式的代码示例

如题所述

第1个回答  2016-05-18

#include <iostream>using namespace std;class RealImage { int m_id; public: RealImage(int i) {   m_id = i;    cout << "   $$ ctor: " << m_id << '\n'; } ~RealImage() {   cout << "   dtor: " << m_id << '\n'; } void draw() {   cout << "   drawing image " << m_id << '\n'; }};// 1. Design an "extra level of indirection" wrapper classclass Image{// 2. The wrapper class holds a pointer to the real class RealImage *m_the_real_thing; int m_id; static int s_next; public: Image() {   m_id = s_next++;    // 3. Initialized to null   m_the_real_thing = 0; } ~Image() {   delete m_the_real_thing; } void draw() {   // 4. When a request comes in, the real object is    //    created "on first use"   if (!m_the_real_thing)   m_the_real_thing = new RealImage(m_id);   // 5. The request is always delegated   m_the_real_thing->draw(); }}; int Image::s_next = 1; int main() {   Image images[5];    for (int i; true;) {   cout << "Exit[0], Image[1-5]: ";    cin >> i;   if (i == 0)   break;   images[i - 1].draw(); } system("Pause");};

相似回答