设计模式之观察者模式


代码执行:

static void Main(string[] args)
        {
            ConcreteSubject1 sub1 = new ConcreteSubject1();
            //  两者进行联系
            ConcreteObserver1 ob1 = new ConcreteObserver1(sub1);
            sub1.RegisterObserver(ob1);
            //  
            sub1.SubState = "不睦沙卡拉卡";
            Console.Read();
        }

1、主题类接口

 //  相当于天气的变化
    //  主题类接口
    public abstract class Subject
    {
        List<Observer> list = new List<Observer>();

        //  注册观察者
        public void RegisterObserver(Observer ob)
        {
            list.Add(ob);
        }

        //  移除观察者
        public void RemoveObserver(Observer ob)
        {
            list.Remove(ob);
        }

        //  当主题类发生改变时通知观察者
        public void NoticeObserver()
        {
            foreach (Observer ob in list)
            {
                ob.Update();
            }
        }
    }


2、观察者接口

//  相当于天气预报的显示板
    //  观察者类接口
    public abstract class Observer
    {
        //  显示主题类改变了什么
        public abstract void Update();
    }


3、具体的主题类

//  具体的主题类
    public class ConcreteSubject1 : Subject
    {
        //  主题类的一个信息
        private string subState;
        public string SubState
        {
            get { return subState; }
            set
            {
                subState = value;
                //  当主题类信息发生改变时通知观察者
                NoticeObserver();
            }
        }
    }


4、具体的观察者类

//  具体的观察者类
    public class ConcreteObserver1 : Observer
    {
        //  具体的那个主题类要视情况而定
        public ConcreteSubject1 sub;
        //  不要在内部 new 观察者,要在Main函数里面 new ,那样还可以注册观察者
        //  否则的话,在里面 new 的观察者是没有被注册的
        public ConcreteObserver1(ConcreteSubject1 sub)
        {
            this.sub = sub;
        }
        public override void Update()
        {
            //  显示板显示新的内容
            Console.WriteLine("Oberver1更新显示:    " + sub.SubState);
        }
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值