上传网站图片不显示自己建的网站如何百度搜索
news/
2025/9/24 7:35:37/
文章来源:
上传网站图片不显示,自己建的网站如何百度搜索,营销型 手机网站,沈阳市住房和城乡建设厅网站首页观察者模式#xff08;Observer#xff09; 观察者模式#xff08;Observer#xff09;简介#xff1a; 定义一个一对多的依赖关系#xff0c;让多个观察者对象监听某个主题对象#xff0c;当主题对象的状态发生改变时#xff0c;主题对象则通知所有的观察者对象#…观察者模式Observer 观察者模式Observer简介 定义一个一对多的依赖关系让多个观察者对象监听某个主题对象当主题对象的状态发生改变时主题对象则通知所有的观察者对象做出相应的反应更新自己的状态等。 观察者模式结构图 C代码 Subject抽象类以及ConcreteSubject具体实现类 //file: Subject.h#pragma once#include Observer.h#include vectorusing namespace std;class Subject{public:Subject();virtual ~Subject();void attach(Observer *pObserver);void detach(Observer *pObserver);void notify();virtual int getState() 0;virtual void setState(int i) 0;private:vectorObserver * m_vtObj;};class ConcreteSubject : public Subject{public:ConcreteSubject();virtual ~ConcreteSubject();virtual int getState();virtual void setState(int i);private:int m_State;};//file: Subject.cpp#include pch.h#include Subject.h//SubjectSubject::Subject() {}Subject::~Subject() {}void Subject::attach(Observer *pObserver){m_vtObj.push_back(pObserver);}void Subject::detach(Observer *pObserver){for (vectorObserver *::iterator iter m_vtObj.begin(); iter ! m_vtObj.end(); iter){if (*iter pObserver){m_vtObj.erase(iter);return;}}}void Subject::notify(){for (vectorObserver *::iterator iter m_vtObj.begin(); iter ! m_vtObj.end(); iter){(*iter)-update(this);}}//ConcreteSubjectConcreteSubject::ConcreteSubject() {}ConcreteSubject::~ConcreteSubject() {}int ConcreteSubject::getState(){return m_State;}void ConcreteSubject::setState(int i){m_State i;}Observer抽象类以及ConcreteObserver具体观察者类 //file: Observer.h#pragma once#include stringusing namespace std;class Subject;class Observer{public:Observer();virtual ~Observer();virtual void update(Subject *ps) 0;};class ConcreteObserver : public Observer{public:ConcreteObserver(string pName);virtual ~ConcreteObserver();virtual void update(Subject *ps);private:string m_ObjName;int m_ObserverState;};//file: Observer.cpp#include pch.h#include Subject.h#include Observer.h#include iostreamusing namespace std;//ObserverObserver::Observer() {}Observer::~Observer() {}//ConcreteOberverConcreteObserver::ConcreteObserver(string pName){m_ObjName pName;}ConcreteObserver::~ConcreteObserver() {}void ConcreteObserver::update(Subject *ps){m_ObserverState ps-getState();cout update observer m_ObjName to state m_ObserverState ! endl;}客户端代码 //file: ObserverPattern.cpp : This file contains the main function. Program execution begins and ends there.#include pch.h#include Subject.hint main(){Subject *sub new ConcreteSubject();Observer *objA new ConcreteObserver(A);Observer *objB new ConcreteObserver(B);sub-attach(objA);sub-attach(objB);sub-setState(101);sub-notify();sub-detach(objB);sub-setState(102);sub-notify();delete sub;delete objA;delete objB;return 0;}C#代码 观察者模式实现 Subject抽象类以及ConcreteSubject具体实现类 public abstract class Subject{private ListObserver objList new ListObserver();public int State { get; set; }public void Attach(Observer obj){objList.Add(obj);}public void Detach(Observer obj){objList.Remove(obj);}public void Notify(){foreach (Observer o in objList){o.Update(this);}}}public class ConcreteSubject : Subject{}Observer抽象类以及ConcreteObserver具体观察者类 public abstract class Observer{public abstract void Update(Subject sub);}public class ConcreteObserver : Observer{int m_State;string m_Name;public ConcreteObserver(string name){this.m_Name name;}public override void Update(Subject sub){this.m_State sub.State;Console.WriteLine(Update Observer {0} to state {1} ., m_Name, m_State);}}客户端代码 class Program{static void Main(string[] args){Subject sub new ConcreteSubject();Observer objA new ConcreteObserver(A);Observer objB new ConcreteObserver(B);sub.Attach(objA);sub.Attach(objB);sub.State 101;sub.Notify();sub.Detach(objB);sub.State 102;sub.Notify();Console.ReadKey(false);}} 事件委托实现 抽象Subject类以及委托方法原型以及ConcreteSubject具体实现类 public delegate void EventHander(Subject sub);public abstract class Subject{public int State { get; set; }public abstract void Notify();}public class ConcreteSubject : Subject{public event EventHander Update;public override void Notify(){if (Update ! null)Update(this);}}ConcreteObserverA/B具体实现类 public class ConcreteObserverA{public int State { get; set; }public string Name { get; set; }public ConcreteObserverA(string name){Name name;}public void FuncA(Subject sub){this.State sub.State;Console.WriteLine(Update Observer {0} to state {1} ., Name, State);}public void FeatureA(Subject sub){this.State sub.State;Console.WriteLine(Update Observer {0} to state {1} ., Name, State);}}public class ConcreteObserverB{public int State { get; set; }public string Name { get; set; }public ConcreteObserverB(string name){Name name;}public void FuncB(Subject sub){this.State sub.State;Console.WriteLine(Update Observer {0} to state {1} ., Name, State);}public void FeatureB(Subject sub){this.State sub.State;Console.WriteLine(Update Observer {0} to state {1} ., Name, State);}}客户端代码 class Program{static void Main(string[] args){ConcreteSubject sub new ConcreteSubject();ConcreteObserverA objA new ConcreteObserverA(ConcreteObserverA);ConcreteObserverB objB new ConcreteObserverB(ConcreteObserverB);sub.Update objA.FuncA;sub.Update objB.FeatureB;sub.State 101;sub.Notify();sub.Update - objB.FeatureB;sub.State 102;sub.Notify();Console.ReadKey(false);}}运行实例 REF 书籍 设计模式与游戏开发、大话设计模式 GitHub https://github.com/me115/design_patterns 转载于:https://www.cnblogs.com/sylvan/p/9064150.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915217.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!