设计模式--观察者模式
来源:互联网 发布:大连 知乎 编辑:程序博客网 时间:2024/06/06 12:44
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象。
游戏中UI消息通知。原来事老大写好框架直接用。今天看了一下最基本的。各种语言都适用。
//开发中需要观察者的地方很多。
观察者抽象基类。//需要关心某事的对象。
public abstract class Observer {
protected string name;
public Observer(string name) {
this.name = name;
}
public abstract void Updatedo();
}
//具体观察者类。实现得到消息的方法
public class PlayerUI : Observer
{
public PlayerUI(string name) : base(name)
{
}
public override void Updatedo()
{
Debug.Log("获取消息。更新角色面板统计数据");
}
}
// 被观察的对象。主题接口
interface Subject {
void Trigger();
void AddObserver(Observer ob);
void RomveObserver(Observer ob);
}
//具体主题
public class SubServer : MonoBehaviour,Subject {
//维护一个列表保存所有观察者
List<Observer> obs = new List<Observer>();
public void AddObserver(Observer ob)
{
obs.Add(ob);
}
public void RomveObserver(Observer ob)
{
obs.Remove(ob);
}
public void Trigger()
{
for (int i = 0; i < obs.Count; i++)
{
obs[i].Updatedo();
}
}
// Use this for initialization
void Start()
{
//注册观察者
TitleUI tiobs = new TitleUI("5杀");
PlayerUI plobs = new PlayerUI("5杀");
AddObserver(tiobs);
AddObserver(plobs);
Trigger();
}
}
//这个就是SubServer 发送一条全局消息。某人5杀了。客户端界面需要显示5杀消息。数据统计界面需要更新杀人记录。等等。
我觉得c#的Action也是一个观察者
using UnityEngine;
using System.Collections;
using System;
public class ActionObserver : MonoBehaviour {
// Use this for initialization
void Start () {
AObserver.obser += UpdateUI;
}
// Update is called once per frame
void UpdateUI(string mes)
{
Debug.Log("接收到消息");
}
}
public class ActionObserverTrriger : MonoBehaviour
{
// Use this for initialization
void Start()
{
if (AObserver.obser!= null)
{
AObserver.obser("消息内容");//触发
}
}
// Update is called once per frame
void Update()
{
}
}
public class AObserver {
//
public static Action<string> obser;
}
//然后想要项目中实际使用还是不够。我一般使用插件。或者框架中有的。
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- NYOJ 海岛争霸(河南省第七届省赛题目)
- Homing pigeons share our ability to build knowledge across generations
- ssm+maven 出现找不到mapper的异常
- eclipse配置.class反编译插件
- 一个matlab遗传算法源程序
- 设计模式--观察者模式
- A题 序号互换(进制转换)
- myeclipse中的错误
- Android Studio录制手机屏幕视频
- Spring注解@Component、@Repository、@Service、@Controller区别
- 自动化测试框架的比较
- nginx+memcached构建页面缓存应用
- Android框架之路——Tablayout+ViewPager+Fragment的使用
- 数独