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

网站建设企业模板丫泰安哪个做网站

网站建设企业模板丫,泰安哪个做网站,互联网网站如何做,用myeclipse做网站观察者模式 什么是观察者 观察者模式(Observer Pattern)#xff1a;定义对象之间的一种一对多依赖关系#xff0c;使得每当一个对象状态发生改变时#xff0c;其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅#xff08;Publish/Subscribe#xf…观察者模式 什么是观察者 观察者模式(Observer Pattern)定义对象之间的一种一对多依赖关系使得每当一个对象状态发生改变时其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅Publish/Subscribe模式、模型-视图Model/View模式、源-监听器Source/Listener模式或从属者Dependents模式。观察者模式是一种对象行为型模式。 结构 **Subject主题**保持一个观察者列表提供添加、删除和通知观察者的方法。**Observer观察者**定义一个更新接口使得在主题状态变化时得到通知。Concrete Subject具体主题实现Subject接口存储状态当状态发生改变时通知所有观察者。Concrete Observer具体观察者实现Observer接口根据主题更新来更新自己的状态。 基本流程 注册观察者观察者向主题注册自己。状态变更主题的状态发生变化。通知观察者主题通过调用注册的观察者的方法来通知它们状态已变化。更新观察者观察者接收到通知后更新自己的状态。 优点 解耦观察者模式能够将主题和观察者解耦它们之间不需要知道对方的存在。可扩展性新增观察者时不需要修改主题的代码符合开闭原则。动态交互可以实现动态的交互主题可以在运行时添加或删除观察者。 缺点 循环引用如果不当使用可能会导致循环引用增加内存管理的难度。性能问题当观察者较多时通知所有观察者可能会造成性能问题。顺序不确定观察者接收通知的顺序是不确定的可能会导致不可预知的副作用。 使用场景 观察者模式通常用于构建松耦合的系统其中一个对象称为主题或发布者可以通知多个其他对象称为观察者或订阅者关于状态的变化。 在线购物平台订单管理 主题Subject订单系统负责在订单状态更新时如确认、发货、收货广播变更事件。观察者Observers包括支付模块、库存管理、物流跟踪等它们监听订单状态更新并执行相应操作。 图形用户界面GUI同步 主题Subject文档管理系统监控文档内容的更改并触发更新事件。观察者Observers界面组件如文本框、滚动条、状态栏等它们接收更新事件并刷新显示。 模型-视图-控制器MVC架构 主题Subject数据模型实时更新数据状态并通知视图与控制器。观察者Observers视图界面和控制器逻辑订阅数据变更视图更新显示控制器响应用户交互。 社交媒体内容更新 主题Subject用户发布系统当用户发布新推文或状态时触发通知。观察者Observers粉丝和关注者他们接收到新内容的通知并更新自己的信息流。 股票交易实时系统 主题Subject股票行情中心实时监控并发布股票价格的变动。观察者Observers交易平台界面、分析工具、自动交易脚本等它们根据行情变化进行决策和操作。 动态配置更新系统 主题Subject配置服务器负责维护应用配置并在配置更新时发送通知。观察者Observers应用服务和组件它们监听配置变更并实时调整自身设置。 注意事项 避免循环引用确保主题和观察者之间不会产生循环引用。管理生命周期合理管理主题和观察者的生命周期避免内存泄漏。线程安全在多线程环境中使用观察者模式时需要考虑线程安全问题 代码案例 package designpatternimport (fmtsync )// Observer 观察者接口 type Observer interface {Update() // Update方法用于接收主题状态变化的通知 }// ConcreteObserver 具体观察者 type ConcreteObserver struct {name string }func (c *ConcreteObserver) Update() {fmt.Printf(%s is notified.\n, c.name) // 具体观察者接收到通知后的具体处理逻辑 }// Subject 主题接口 type Subject interface {RegisterObserver(observer Observer) // 注册观察者DeregisterObserver(observer Observer) // 注销观察者NotifyObservers() // 通知所有观察者 }// ConcreteSubject 具体主题 type ConcreteSubject struct {observers []Observer // 观察者列表state int // 主题状态mu sync.Mutex // 互斥锁用于保护并发访问 }// NewConcreteSubject 创建具体主题实例 func NewConcreteSubject() *ConcreteSubject {return ConcreteSubject{observers: make([]Observer, 0),mu: sync.Mutex{}, // 初始化互斥锁} }func (cs *ConcreteSubject) RegisterObserver(observer Observer) {cs.mu.Lock()defer cs.mu.Unlock()cs.observers append(cs.observers, observer) // 注册观察者到列表中 }func (cs *ConcreteSubject) DeregisterObserver(observer Observer) {cs.mu.Lock()defer cs.mu.Unlock()for i, ob : range cs.observers {if ob observer {cs.observers append(cs.observers[:i], cs.observers[i1:]...) // 从观察者列表中注销观察者break}} }func (cs *ConcreteSubject) NotifyObservers() {cs.mu.Lock()defer cs.mu.Unlock()for _, ob : range cs.observers {ob.Update() // 通知所有观察者主题状态变化} }func (cs *ConcreteSubject) SetState(state int) {cs.mu.Lock()defer cs.mu.Unlock()cs.state state // 设置主题状态cs.NotifyObservers() // 通知所有观察者主题状态变化 }func main() {// 在 main 函数中演示了具体的使用方法创建具体主题实例注册观察者并设置主题状态触发通知subject : NewConcreteSubject()ob1 : ConcreteObserver{ob1}ob2 : ConcreteObserver{ob2}subject.RegisterObserver(ob1)subject.RegisterObserver(ob2)subject.SetState(1) } 模拟一个新闻发布网站 package mainimport (fmtsync )// 新闻类型 type NewsType intconst (Business NewsType iotaTechnologySportsWorldEntertainment )// 观察者接口 type Observer interface {Update(News) }// 具体观察者结构体 type Subscriber struct {Name stringInterests map[NewsType]boolRegister chan NewsTypeUnregister chan NewsType }func NewSubscriber(name string) *Subscriber {return Subscriber{Name: name,Interests: make(map[NewsType]bool),Register: make(chan NewsType),Unregister: make(chan NewsType),} }func (s *Subscriber) Update(news News) {if _, ok : s.Interests[news.Type]; ok {fmt.Printf(%s received news: %s\n, s.Name, news.Headline)} }func (s *Subscriber) RegisterInterest(interest NewsType) {s.Register - interests.Interests[interest] true }func (s *Subscriber) UnregisterInterest(interest NewsType) {s.Unregister - interestdelete(s.Interests, interest) }// 主题接口 type Subject interface {Attach(Observer)Detach(Observer)Notify(string) }// 具体主题结构体 type NewsAgency struct {observers map[Observer]boolnews chan Newsmu sync.Mutex }func NewNewsAgency() *NewsAgency {return NewsAgency{observers: make(map[Observer]bool),news: make(chan News),} }func (a *NewsAgency) Attach(observer Observer) {a.mu.Lock()defer a.mu.Unlock()a.observers[observer] true }func (a *NewsAgency) Detach(observer Observer) {a.mu.Lock()defer a.mu.Unlock()delete(a.observers, observer) }func (a *NewsAgency) Notify(headline string) {for observer, _ : range a.observers {news : News{Headline: headline}go observer.Update(news)} }// 新闻结构体 type News struct {Headline stringType NewsType }func main() {// 创建新闻机构agency : NewNewsAgency()// 创建订阅者alice : NewSubscriber(Alice)bob : NewSubscriber(Bob)// 订阅兴趣alice.RegisterInterest(Business)alice.RegisterInterest(World)bob.RegisterInterest(Technology)bob.RegisterInterest(Entertainment)// 将订阅者作为观察者注册到新闻机构agency.Attach(alice)agency.Attach(bob)// 新闻发布agency.Notify(Big Corp acquired Small Tech for $1B)// 订阅者取消订阅bob.UnregisterInterest(Entertainment)// 再次新闻发布agency.Notify(New breakthrough in AI technology) }定义了 NewsType 类型用于区分不同类型的新闻。Observer 接口有一个 Update 方法用于接收新闻更新。Subscriber 结构体代表具体的观察者它包含订阅者的名字和兴趣以及注册和注销兴趣的通道。Subject 接口包含 Attach、Detach 和 Notify 方法。NewsAgency 结构体代表具体的主题它维护了一个观察者集合和一个发布新闻的通道。News 结构体包含新闻的标题和类型。在 main 函数中我们创建了新闻机构和两个订阅者将订阅者的兴趣注册到新闻机构并模拟了新闻发布。
http://www.dnsts.com.cn/news/108339.html

相关文章:

  • 简单flash个人网站做推广可以在哪些网站发布软文
  • 网站建设推进情况公司网站未备案
  • 网站商城怎么做app广东网站设计的公司
  • 网站中的给我留言怎么做百度推广业务员
  • 深圳定制网站制作费用红色文化网站建设
  • 合肥建设网站首页wordpress 信息查询插件
  • 做网站的安全证书河东网站建设公司
  • 照明网站设计wordpress 短代码 对齐
  • 网页设计是网站建设与管理的内容吗seo 培训教程
  • 网站海外推广怎么做开淘宝店和做网站有什么区别
  • 网站建设合同制人员招聘网站建设立项说明书
  • 网站建设 验收意见wordpress商城源码
  • 在哪个网站申请建设资质同城可以做别人一样的门户网站吗
  • 家里面的服务器可以做网站吗上海有哪些大公司总部
  • 科技服务网站建设内容欧美网站源码
  • 正规的网站制作开发管理系统中计算机应用
  • 一个数据库两个网站wordpress登陆怀化网络有限公司
  • 杭州建设工程信息网站化妆所有步骤
  • 网站轮播图怎么做的信阳网站建设培训
  • 河南鑫安胜通建设有限公司网站大理石在哪些网站做宣传
  • 专业做电子的外贸网站江苏省句容建设局网站
  • 静安青岛网站建设wordpress七牛w3tc加速
  • wordpress meiwen主题邢台seo
  • 网页实时翻译软件优化营商环境工作开展情况汇报
  • 成都网站建设好多科技我要学电脑哪里有短期培训班
  • 提供广东中山网站建设沙田镇网站建设
  • 网站开发售后服务能力国外公司网站设计
  • 网站建设的软件平台wordpress统计蜘蛛
  • 石家庄模板做网站长沙网站自己制作
  • 政和网站建设wzjseo免费建造公司网站