学习Go语言之观察者模式
首先了解一下观察者模式
1.目标和观察者抽象对象需要首先建立
//抽象主题
type Subject interface {
Add(o Observer)
Send(str string)
} //抽象观察者
type Observer interface {
Receive(str string)
}
2.主题的具体实现
//-------------天气主题------------------
type NewsSubject struct {
title string
l *list.List
} //天气主题非侵入式实现抽象主题
func (sub *NewsSubject) Add(o Observer) {
sub.l.PushBack(o)
} //天气主题非侵入式实现抽象主题
func (sub *NewsSubject) Send(str string) {
for i := sub.l.Front(); i != nil; i = i.Next() {
(i.Value).(Observer).Receive(sub.title + "发送的:" + str)
}
} //-------------热点主题------------------
type HotSubject struct {
title string
l *list.List
} //热点主题非侵入式实现抽象主题
func (sub *HotSubject) Add(o Observer) {
sub.l.PushBack(o)
} //热点主题非侵入式实现抽象主题
func (sub *HotSubject) Send(str string) {
for i := sub.l.Front(); i != nil; i = i.Next() {
(i.Value).(Observer).Receive(sub.title + "发送的:" + str)
}
}
3.观察者具体实现
//-------------a观察者------------------
type aObserver struct {
name string
} //a观察者非侵入式实现抽象观察者
func (o *aObserver) Receive(str string) {
fmt.Println("A类观察者【" + o.name + "】接收" + str)
} //-------------b观察者------------------
type bObserver struct {
name string
} //b观察者非侵入式实现抽象观察者
func (o *bObserver) Receive(str string) {
fmt.Println("B类观察者【" + o.name + "】接收" + str)
}
4.实际调用
func main() {
a := &aObserver{
name: "张三",
} b := &bObserver{
name: "李四",
} //新闻允许a和b类型观察者订阅
news := NewsSubject{
l: list.New(),
title: "武汉新闻",
}
news.Add(a)
news.Add(b) //热点只允许b类型观察者订阅
hot := HotSubject{
l: list.New(),
title: "孝感热点",
}
hot.Add(b) news.Send("全省暴雨红色警报")
hot.Send("全市停工停课")
}
5.运行结果
学习Go语言之观察者模式的更多相关文章
- 我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗
文章背景,回答提问:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗? 我的建议是这样:1. 不要辞职.首先说,你对整个开发没有一个简单的了解,或一个系统的入门学习.换句 ...
- 开始学习c语言
学习c语言的第一篇博客,心里的感觉说不出来,不知道能不能坚持下去,我是一名工作了差不多2年的phper,其实我本来是想学习数据结构和算法的,但是尼玛这年头那些书的例子都不是php,动不动就是c,jav ...
- 学习C语言感悟
还记得刚上第一节C语言课的时候,基本上一节课只有最后10分钟的内容听懂了.在此之前从没接触过C语言,想说看看书预习一下吧,可是完全找不到条理,发现老师也不是按书上的顺序讲的.当时就特别着急,想说难道 ...
- 学习Nim语言.rar(nim语言中文教程下载)
学习Nim语言 nim 语法上类似python ,是一门静态编译型语言,nim 使用空格缩进标示语句块的开始和结束, 喜欢python风格的程序员应该也会很容易适应和喜欢nim的风格. nim语言官方 ...
- 学习C语言常用的几个网站
今天整理资料,发现了以前学习C语言时,常用到的几个网站: 1.http://ganquan.info/standard-c/ 改网站包含了C语言标准版的15个头文件解释以及函数,137个函数和演示 ...
- 对大一新生开始学习C语言课程谈几点看法
大家好,首先祝贺大家进入了大学,迈入了大学的校门,也意味着开始了新的征程,希望大家能够有一个美好的大学四年. 先做下自我介绍,我叫李帅阳,(大家可以称呼我 李老师,或是班助,或是...)这是在邹欣老师 ...
- 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...
- 新学习的语言Groovy
什么是 Groovy? Groovy 是 JVM 的一个替代语言 —替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...
- 转:从开源项目学习 C 语言基本的编码规则
从开源项目学习 C 语言基本的编码规则 每个项目都有自己的风格指南:一组有关怎样为那个项目编码约定.一些经理选择基本的编码规则,另一些经理则更偏好非常高级的规则,对许多项目而言则没有特定的编码规则,项 ...
随机推荐
- rails数据库操作rake db一点心得
问题描述,对于很多的新手rails lover来说,搞定db是件头疼的事情,当建立了一个model,测试了半天发现我草列名写错了,再过一会儿发现association里面竟然没有xxx_id,这下子s ...
- BZOJ 2179 FFT模板
思路:FFT板子题 //By SiriusRen #include <cstdio> #include <complex> using namespace std; typed ...
- js调节图片的亮度
js调节图片的亮度:(使用CSS3的滤镜) 1.实现点亮图标.熄灭图标的效果 效果图: 页面代码: <!DOCTYPE html> <%@ page language="j ...
- 固定执行计划-使用coe_xfr_sql_profile
一.历史执行计划固定 历史的执行计划找到一个合理的执行计划进行绑定 1. 存在多个执行计划的语句,按照索引是比较合适的,FULL SCAN不合适 select * from scott.emp whe ...
- Edge 浏览器
Edge浏览器设计理念 无法播放:https://edgewelcomecdn.microsoft.com/site/images/tabs/rs3/tabs_screen.acd367a2.mp4 ...
- Codeforces 987A. Infinity Gauntlet(手速题,map存一下输出即可)
解法: 1.先将对应的字符串存入map. 2.然后将输入的串的second置为空. 3.输出6-n,输出map中的非空串. 代码: #include <bits/stdc++.h> usi ...
- 1806最大数 string和sort函数用法
1.C++自带sort函数用法 sort函数有三个参数: (1)第一个是要排序的数组的起始地址 (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小 ...
- RMAN删除归档脚本
crosscheck archivelog all; delete noprompt expired archivelog all; delete noprompt archivelog un ...
- oc语言的特点
oc语言的特点分为以下几个方面: 1.运行时: 2.block闭包: 3.内存管理: 4.大中枢派发: 一.运行时的基础是isa 类结构:由clang编译前端支撑. 从它衍生出以下几个特征: 1.消息 ...
- 关于Scrapy爬虫项目运行和调试的小技巧(下篇)
前几天给大家分享了关于Scrapy爬虫项目运行和调试的小技巧上篇,没来得及上车的小伙伴可以戳超链接看一下.今天小编继续沿着上篇的思路往下延伸,给大家分享更为实用的Scrapy项目调试技巧. 三.设置网 ...