{"id":454,"date":"2010-06-06T21:11:22","date_gmt":"2010-06-06T13:11:22","guid":{"rendered":"http:\/\/115.29.108.60\/?p=454"},"modified":"2010-06-06T21:11:22","modified_gmt":"2010-06-06T13:11:22","slug":"observer%ef%bc%88%e8%a7%82%e5%af%9f%e8%80%85%ef%bc%89%e2%80%94%e2%80%94%e5%af%b9%e8%b1%a1%e8%a1%8c%e4%b8%ba%e5%9e%8b%e6%a8%a1%e5%bc%8f","status":"publish","type":"post","link":"http:\/\/115.29.108.60\/?p=454","title":{"rendered":"OBSERVER\uff08\u89c2\u5bdf\u8005\uff09\u2014\u2014\u5bf9\u8c61\u884c\u4e3a\u578b\u6a21\u5f0f"},"content":{"rendered":"<p>\u8fd9\u4e24\u5929\u505aMVC\uff0c\u5176\u4e2d\u6709OBSERVER\u6a21\u5f0f\u7684\u5e94\u7528\uff0c\u7b80\u5355\u5b9e\u73b0\u4e86\u4e0b\u63a5\u53e3\u3002<\/p>\n<p>Subject.h<\/p>\n<p>#ifndef _SUBJECT_H<br \/>\n#define _SUBJECT_H<\/p>\n<p>#include &#8220;Observer.h&#8221;<br \/>\n#define MAX_OBSERVER_NUM 10<\/p>\n<p>class Subject<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 public:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 virtual ~Subject();<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 virtual void Attach(Observer *pObserver);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 virtual void Detach(Observer *pObserver);\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ \u672a\u5b9e\u73b0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 virtual void Notify();<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 protected:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Subject(int m = MAX_OBSERVER_NUM);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 private:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Observer **ppObserver;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int max;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int size;<br \/>\n};<\/p>\n<p>#endif<\/p>\n<p><!--more--><\/p>\n<p>Subject.cpp<\/p>\n<p>#include &#8220;Subject.h&#8221;<\/p>\n<p>Subject::Subject(int m) : max(m), size(0)<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 ppObserver = new Observer*[max];<br \/>\n}<\/p>\n<p>Subject::~Subject()<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 if(ppObserver)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delete [] ppObserver;<br \/>\n}<\/p>\n<p>void Subject::Attach(Observer *pObserver)<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0 if(size &gt;= max)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return;<br \/>\n\u00a0\u00a0\u00a0\u00a0 ppObserver[size++] = pObserver;<br \/>\n}<\/p>\n<p>void Subject::Detach(Observer *pObserver)<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0 return;<br \/>\n}<\/p>\n<p>void Subject::Notify()<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0 for(int i = 0; i &lt; size; i++)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ppObserver[i]-&gt;Update(this);<br \/>\n}<\/p>\n<p>Observer.h<\/p>\n<p>#ifndef _OBSERVER_H<br \/>\n#define _OBSERVER_H<\/p>\n<p>class Subject;\u00a0\u00a0\u00a0\u00a0 \/\/ Subject\u7684\u5411\u524d\u58f0\u660e<\/p>\n<p>class Observer<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 public:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 virtual ~Observer() {};<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 virtual void Update(Subject* pSubject) = 0;\u00a0\u00a0\u00a0 \/\/ \u5b50\u7c7b\u5fc5\u987b\u5b9e\u73b0\u7684\u65b9\u6cd5<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 protected:<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Observer() {};\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ \u4ec5\u7531\u5b50\u7c7b\u8c03\u7528<br \/>\n};<\/p>\n<p>#endif<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u4e24\u5929\u505aMVC\uff0c\u5176\u4e2d\u6709OBSERVER\u6a21\u5f0f\u7684\u5e94\u7528\uff0c\u7b80\u5355\u5b9e\u73b0\u4e86\u4e0b\u63a5\u53e3\u3002 Subject.h #ifndef _S [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-454","post","type-post","status-publish","format-standard","hentry","category-designpatterns"],"_links":{"self":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=454"}],"version-history":[{"count":1,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/454\/revisions"}],"predecessor-version":[{"id":455,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/454\/revisions\/455"}],"wp:attachment":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=454"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}