当前位置: 七九推 > IT编程>软件设计>设计模式 > 设计模式系列 - 观察者模式

设计模式系列 - 观察者模式

2022年06月23日 设计模式 我要评论
当对象之间存在一对多的关系时,若需要进行对象之间的通知,则可使用观察者模式介绍观察者模式属于行为型模式,当一个对象的状态发生改变时,若我们想通知其他对象,此时可通过观察者模式来进行解决。类图描述代码实

当对象之间存在一对多的关系时,若需要进行对象之间的通知,则可使用观察者模式

介绍

观察者模式属于行为型模式,当一个对象的状态发生改变时,若我们想通知其他对象,此时可通过观察者模式来进行解决。

类图描述

代码实现

1、定义抽象观察者

public abstract class observer
{
    protected subject subject;
    public abstract void update();
}

2、定义观察者管理类

public class subject
{
    private list<observer> observers = new list<observer>();

    private int state;
    public int getstate() => this.state;

    public void setstate(int state)
    {
        this.state = state;
        nitifyallobservers();
    }

    public void attach(observer observer)
    {
        observers.add(observer);
    }

    private void nitifyallobservers()
    {
        foreach (var observer in observers)
        {
            observer.update();
        }
    }
}

3、定义具体观察者

public class binaryobserver : observer
{
    public binaryobserver(subject subject)
    {
        this.subject = subject;
        this.subject.attach(this);
    }

    public override void update()
    {
        console.writeline($"binary string:{subject.getstate()}");
    }
}

public class hexaobserver:observer
{
    public hexaobserver(subject subject)
    {
        this.subject = subject;
        this.subject.attach(this);
    }

    public override void update()
    {
        console.writeline($"hex string:{subject.getstate()}");
    }
}

public class octalobserver:observer
{
    public octalobserver(subject subject)
    {
        this.subject = subject;
        this.subject.attach(this);
    }

    public override void update()
    {
        console.writeline($"octal string:{subject.getstate()}");

    }
}

4、上层调用

class program
{
    static void main(string[] args)
    {
        subject subject = new subject();

        new hexaobserver(subject);
        new octalobserver(subject);
        new binaryobserver(subject);
        console.writeline("first state change:15");
        subject.setstate(15);
        console.writeline("second state change:10");
        subject.setstate(10);

        console.readkey();
    }
}

总结

观察者模式通过一种集合方式将所有观察者管理起来,并最终循环遍历通知所有对象。

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 23种设计模式概述

    23种设计模式概述

    设计模式共有23种,创建型模式5种,结构型模式7种,行为型模式11种,本章只做概念性说明。 ࿰... [阅读全文]
  • 设计模式 - 策略模式

    设计模式 - 策略模式

    前言:  先不管模式, 把他和他的名字都忘了, 来看看问题 和 设计思路. 为啥要这么做.场景:  有一家店铺, 里面有一个售货员, 售货员当然是要卖东西的啦,... [阅读全文]
  • 大话设计模式笔记(三)の六大原则

    大话设计模式笔记(三)の六大原则

    单一职责原则英文:single responsibility principle,简称srp。定义就一个类而言,应该仅有一个引起它变化的原因。描述如果一个类承担... [阅读全文]
  • 设计模式之工厂模式(三)

    上一次我们已经通过代码,简单的认识了工厂方法模式,具体的思路请移步到,进行查看。这次,让我们通过设计模式的思想,来好好认识下工厂方法模式。创建者和产品所有工厂模式都用来封装对象的创…

    2022年06月23日 软件设计
  • 创建型模式之工厂模式(2.2)

    创建型模式之工厂模式(2.2)

    什么是工厂模式?工厂模式是创建型模式的一种,工厂是用来生产的,而在java里,是用来生产对象实例的。和单例模式相似,工厂模式同样聚焦于在考虑整个软件构建的情况下... [阅读全文]
  • 设计模式--Proxy模式

    设计模式--Proxy模式

    这篇主要介绍代理模式相关内容,主要是一些基本概念普及。代理模式1、什么是代理模式?代理模式(proxy),为其他对象提供一种代理以控制对这个对象的访问。[dp]... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2022  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com