当前位置: 首页 > news >正文

网站广告尺寸天河区住房和建设水务局官方网站

网站广告尺寸,天河区住房和建设水务局官方网站,网站建设 企业网站 框架,西宁市城东区住房和建设局网站1. 设计模式原理说明 观察者模式#xff08;Observer Pattern#xff09; 是一种行为设计模式#xff0c;它定义了一种一对多的依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式非常适合处理事件驱动系统Observer Pattern 是一种行为设计模式它定义了一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都会得到通知并自动更新。这种模式非常适合处理事件驱动系统其中对象之间需要保持同步但又不想紧密耦合。 主要角色 Subject主题/被观察者它知道它的观察者是谁。任何数量的观察者都可以观察一个主题。提供注册和删除观察者对象的方法。Observer观察者为那些在主题发生改变时需获得通知的对象定义一个更新接口。ConcreteSubject具体主题将有关状态存储于具体观察者对象当它的状态发生改变时向它的各个观察者发出通知。ConcreteObserver具体观察者实现Observer的更新接口以使自身状态与主题的状态保持一致。 2. UML 类图及解释 UML 类图 ------------------ ----------------------- | Subject | | Observer | |------------------| |-----------------------| | - observers: ListObserver | | - update(message: String): void | | - register(observer: Observer) | ----------------------- | - unregister(observer: Observer) | | | - notifyObservers(message: String) | | ------------------ -----------------------||v---------------------------| ConcreteObserverA ||--------------------------|| - update(message: String) |---------------------------^|---------------------------| ConcreteObserverB ||--------------------------|| - update(message: String) |--------------------------- 类图解释 Subject定义了添加、删除和通知观察者的接口。具体主题会实现这些方法并维护一个观察者列表。Observer定义了一个更新接口当主题发生变化时观察者会被调用。ConcreteSubject实现了Subject接口当其状态变化时会通知所有已注册的观察者。ConcreteObserverA 和 ConcreteObserverB实现了Observer接口当收到主题的通知时会更新自己的状态。 3. 代码案例及逻辑详解 Java 代码案例 // 观察者接口 interface Observer {void update(String message); }// 具体观察者A class ConcreteObserverA implements Observer {Overridepublic void update(String message) {System.out.println(ConcreteObserverA received: message);} }// 具体观察者B class ConcreteObserverB implements Observer {Overridepublic void update(String message) {System.out.println(ConcreteObserverB received: message);} }// 被观察者接口 interface Subject {void register(Observer observer);void unregister(Observer observer);void notifyObservers(String message); }// 具体被观察者 class ConcreteSubject implements Subject {private ListObserver observers new ArrayList();Overridepublic void register(Observer observer) {observers.add(observer);}Overridepublic void unregister(Observer observer) {observers.remove(observer);}Overridepublic void notifyObservers(String message) {for (Observer observer : observers) {observer.update(message);}}public void changeState() {// 模拟状态变化System.out.println(State changed, notifying observers...);notifyObservers(State has been changed!);} }// 客户端 public class Client {public static void main(String[] args) {ConcreteSubject subject new ConcreteSubject();Observer observerA new ConcreteObserverA();Observer observerB new ConcreteObserverB();subject.register(observerA);subject.register(observerB);subject.changeState();subject.unregister(observerA);subject.changeState();} } C 代码案例 #include iostream #include vector #include algorithm// 观察者接口 class Observer { public:virtual void update(const std::string message) 0;virtual ~Observer() {} };// 具体观察者A class ConcreteObserverA : public Observer { public:void update(const std::string message) override {std::cout ConcreteObserverA received: message std::endl;} };// 具体观察者B class ConcreteObserverB : public Observer { public:void update(const std::string message) override {std::cout ConcreteObserverB received: message std::endl;} };// 被观察者接口 class Subject { private:std::vectorObserver* observers; public:void registerObserver(Observer* observer) {observers.push_back(observer);}void unregisterObserver(Observer* observer) {observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());}void notifyObservers(const std::string message) {for (Observer* observer : observers) {observer-update(message);}}void changeState() {// 模拟状态变化std::cout State changed, notifying observers... std::endl;notifyObservers(State has been changed!);} };// 客户端 int main() {Subject subject;Observer* observerA new ConcreteObserverA();Observer* observerB new ConcreteObserverB();subject.registerObserver(observerA);subject.registerObserver(observerB);subject.changeState();subject.unregisterObserver(observerA);subject.changeState();delete observerA;delete observerB;return 0; } Python 代码案例 # 观察者接口 class Observer:def update(self, message):raise NotImplementedError# 具体观察者A class ConcreteObserverA(Observer):def update(self, message):print(fConcreteObserverA received: {message})# 具体观察者B class ConcreteObserverB(Observer):def update(self, message):print(fConcreteObserverB received: {message})# 被观察者接口 class Subject:def __init__(self):self._observers []def register(self, observer):self._observers.append(observer)def unregister(self, observer):self._observers.remove(observer)def notify_observers(self, message):for observer in self._observers:observer.update(message)def change_state(self):# 模拟状态变化print(State changed, notifying observers...)self.notify_observers(State has been changed!)# 客户端 if __name__ __main__:subject Subject()observerA ConcreteObserverA()observerB ConcreteObserverB()subject.register(observerA)subject.register(observerB)subject.change_state()subject.unregister(observerA)subject.change_state() Go 代码案例 package mainimport (fmt )// 观察者接口 type Observer interface {update(message string) }// 具体观察者A type ConcreteObserverA struct{}func (c *ConcreteObserverA) update(message string) {fmt.Printf(ConcreteObserverA received: %s\n, message) }// 具体观察者B type ConcreteObserverB struct{}func (c *ConcreteObserverB) update(message string) {fmt.Printf(ConcreteObserverB received: %s\n, message) }// 被观察者接口 type Subject struct {observers []Observer }func (s *Subject) register(observer Observer) {s.observers append(s.observers, observer) }func (s *Subject) unregister(observer Observer) {for i, obs : range s.observers {if obs observer {s.observers append(s.observers[:i], s.observers[i1:]...)break}} }func (s *Subject) notifyObservers(message string) {for _, observer : range s.observers {observer.update(message)} }func (s *Subject) changeState() {// 模拟状态变化fmt.Println(State changed, notifying observers...)s.notifyObservers(State has been changed!) }// 客户端 func main() {subject : Subject{}observerA : ConcreteObserverA{}observerB : ConcreteObserverB{}subject.register(observerA)subject.register(observerB)subject.changeState()subject.unregister(observerA)subject.changeState() } 4. 总结 观察者模式 是一种行为设计模式它定义了一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都会得到通知并自动更新。这种模式特别适用于事件驱动系统其中对象之间需要保持同步但又不想紧密耦合。 主要优点 松耦合观察者和被观察者之间的依赖关系非常松散观察者不需要知道被观察者的具体实现细节。支持广播通信被观察者可以向所有注册的观察者广播消息无需关心观察者的具体类型。灵活性高可以动态地添加或删除观察者而不会影响其他观察者。 主要缺点 过度通知如果被观察者的状态频繁变化可能会导致大量不必要的通知。复杂性增加引入观察者模式会增加系统的复杂性特别是当观察者和被观察者之间存在复杂的依赖关系时。调试困难由于观察者模式涉及多个对象之间的交互调试时可能比较困难。 适用场景 当一个对象的改变需要同时改变其他对象而且不知道具体有多少对象需要改变时。当一个对象需要在另一个对象的状态发生变化时自动更新但又不想紧密耦合时。当一个抽象模型有两个方面其中一个方面依赖于另一方面将这两者封装在独立的对象中以提高可复用性和灵活性时。
http://www.hkea.cn/news/14258518/

相关文章:

  • 小程序制作网站怎么使用网站程序
  • 长春建网站一般多少钱网站商城例子下载
  • 上海网站建设网页制作你却沪佳装饰门店地址
  • ui设计网站模板网站建设前期规划方案范文
  • 做网站需要域名手机在线做ppt的网站
  • intitle 网站建设wordpress 不提示更新
  • 工程项目网站wordpress可视化编辑器插件
  • 导航站wordpress广告费内包括网站建设
  • 有什么免费建站网站成都网站制作成都网站制作
  • 岫岩做网站网站备案后会被注销吗
  • 建设监理收录网站抖音seo教程
  • 网站免费制作教程免费刷seo
  • 网站设计酷站学校网站模板 dedecms
  • 网站开发工具中三剑客包括网络营销推广渠道有哪些
  • 林州网站建设公司宁夏建设厅官方网站
  • 眼镜商城网站建设方案京东app下载官网免费下载
  • 中国工程建设造价管理协会网站交换链接营销成功案例
  • 杨浦做网站电子商务网站有哪些类型
  • 襄阳购物网站开发设计php wap网站实现滑动式数据分页
  • 石林彝族网站建设响应式网站模板 视差
  • 广州做购物网站网站建设中 倒计时
  • 明空网络做网站好不好wordpress中文网址转换
  • 专业网站优化哪家好wordpress招商平台
  • 网站上的验证码怎么做i排版 wordpress
  • 帝国+只做网站地图网站建设开发计入什么会计科目
  • 建站成本上传到ftp网站模板
  • wordpress建立购物网站阿哥体育个人网页
  • 宁波个人做网站基于dw的动物网站设计论文
  • 北京网站大全网站名称能用商标做名称吗
  • 越南建设部网站自己做下载网站