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

当主题里面的消息发生变换,通知所有的观察所含信息发生变更
C#--设计模式(观察者模式)_第1张图片

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类。

你可能感兴趣的:(设计模式,设计模式)