// Class csubject {public: csubject ();~ Csubject (); Virtual bool downpic () = 0; protected: Private :}; // interface class implementation file # include "stdafx. H "# include" subject. H "csubject: csubject () {} csubject ::~ Csubject () {}// proxy Class header file # include "subject. H" # include "realsubject. H" class cproxy: Public csubject {public: cproxy ();~ Cproxy (); bool downpic (); csubject * getinstance (); protected: Private: csubject * m_prealsubject;}; // proxy class implementation file # include "stdafx. H "# include" proxy. H "cproxy: cproxy () {m_prealsubject = NULL;} cproxy ::~ Cproxy () {If (null! = M_prealsubject) {Delete m_prealsubject; m_prealsubject = NULL ;}} bool cproxy: downpic () {return getinstance ()-> downpic ();} csubject * cproxy: getinstance () {If (null = m_prealsubject) {m_prealsubject = new crealsubject ();} return m_prealsubject;} // image download Class header file # include "subject. H "class crealsubject: Public csubject {public: crealsubject ();~ Crealsubject (); bool downpic (); protected: Private :}; // image download class implementation file # include "stdafx. H "# include" realsubject. H "# include <iostream> using namespace STD; crealsubject: crealsubject () {} crealsubject ::~ Crealsubject () {} bool crealsubject: downpic () {cout <"download file start" <Endl; sleep (3000 ); cout <"Download end" <Endl; return true;} // client call implementation # include "stdafx. H "# include" subject. H "# include" proxy. H "# include <iostream> using namespace STD; int main (INT argc, char * argv []) {cout <" parse head "<Endl; cproxy * m_proxy = new cproxy (); m_proxy-> downpic (); Delete m_proxy; cout <"parse foot" <Endl; return 0 ;}