C#--设计模式(观察者模式)

当主题里面的消息发生变换,通知所有的观察所含信息发生变更
在这里插入图片描述

public interface Subject{

    void RegisterObserver(Observes ob);
    void RemoveObserver(Observes ob);
    void NotifyObserver();
}
using System.Collections;
using System.Collections.Generic;

public class ConcreateSubject : Subject
{
    List<Observes> Observes = new List<Observes>();
    public Tst type;
    
    public void SetChange(Tst _type)
    {
        type = _type;
        NotifyObserver();
    }
    public void RegisterObserver(Observes ob)
    {
        Observes.Add(ob);
    }
    public void RemoveObserver(Observes ob)
    {
        Observes.Remove(ob);
    }
    public void NotifyObserver()
    {
        for (int i = 0; i < Observes.Count; i++)
        {
            Observes[i].ChangeType();
        }
    }
}
public interface  Observes{

    void ChangeType();
}
using UnityEngine;
using System.Collections;

public class ConcreateObserveWalk :MonoBehaviour, Observes
{
    public ConcreateSubject subject;
  
    public  void ChangeType()
    {
        Debug.Log(subject.type);
    }
    public void Init_Register(ConcreateSubject sub)
    {
        subject = sub;
        subject.RegisterObserver(this);
    }
}
using UnityEngine;
using System.Collections;
using DG.Tweening;
public class ConcreateObserveRun :MonoBehaviour, Observes
{
    public ConcreateSubject subject;
    public Transform Cube;
    public  void ChangeType()
    {
        Debug.Log(subject.type);
        if (subject.type==Tst.Walk)
        {
            Cube.DOMove(new Vector3(5f, 0f, 0f), 2f);
        }
    }
    public void Init_Register(ConcreateSubject sub)
    {
        subject = sub;
        subject.RegisterObserver(this);
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {
    private Tst type = Tst.Walk;
    public ConcreateObserveRun run;
    public ConcreateObserveWalk walk;
    // Use this for initialization
    void Start () {
        ConcreateSubject sub = new ConcreateSubject();
        run.Init_Register(sub);
        walk.Init_Register(sub);
        sub.SetChange(type);
    }
}

做为一名初学者,有很多地方需要改进,如果大家有更好的实现方式,记得私信我,很多时候真的需要有人点拨一下,发散自己的思维。
需求:ConcreateObserveWalk,ConcreateObserveRun,需要继承Mono behaviour类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值