首页 > 其他分享 >使用观察者模式实现窗体间按钮点击事件的解耦

使用观察者模式实现窗体间按钮点击事件的解耦

时间:2023-12-01 15:56:06浏览次数:49  
标签:End Sub 观察者 点击 窗体 按钮

为了温故而知新,本博客旨在记录我学习VB.net编程的过程,分享基础知识和实用技巧,帮助有需要的朋友轻松入门VB.net编程。无论您是想开发Windows平台上的应用程序,还是想在.NET生态系统中展现创造力和创新精神,本文都将为您提供宝贵的指导。

在软件开发中,经常会遇到一个窗体上的按钮点击事件需要触发另一个窗体上按钮点击事件的情况。为了解耦这些事件,我们可以使用观察者模式来实现。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都可以得到通知并自动更新。本文将介绍如何使用观察者模式来实现窗体间按钮点击事件的解耦。

步骤一:创建按钮观察者接口

首先,在 Visual Basic.NET 中,我们需要创建一个按钮观察者接口,该接口包含一个按钮点击事件的通知方法。这样,其他窗体就可以通过该接口接收按钮点击事件的通知。

Public Interface IButtonObserver
    Sub ButtonClicked(buttonName As String)
End Interface

步骤二:创建按钮被观察者类

接下来,我们创建一个按钮被观察者类 ButtonObservable,用于跟踪已注册的观察者,并在按钮点击事件发生时通知它们。

Public Class ButtonObservable
    Private observers As List(Of IButtonObserver) = New List(Of IButtonObserver)()

    Public Sub RegisterObserver(observer As IButtonObserver)
        observers.Add(observer)
    End Sub

    Public Sub RemoveObserver(observer As IButtonObserver)
        observers.Remove(observer)
    End Sub

    Public Sub NotifyObservers(buttonName As String)
        For Each observer As IButtonObserver In observers
            observer.ButtonClicked(buttonName)
        Next
    End Sub
End Class

步骤三:实现按钮观察者

在另一个窗体中,我们实现按钮观察者接口,注册为观察者,并在接收到按钮点击事件的通知时执行相应的操作。

Public Class Form2
    Implements IButtonObserver

    Private observable As ButtonObservable = New ButtonObservable()

    ' ...

    Public Sub ButtonClicked(buttonName As String) Implements IButtonObserver.ButtonClicked
        Select Case buttonName
            Case "btnForm1B"
                ' 在此处执行响应 btnForm1B 按钮点击事件的逻辑
            Case "btnForm1C"
                ' 在此处执行响应 btnForm1C 按钮点击事件的逻辑
            ' 添加其他按钮的处理逻辑
        End Select
    End Sub
End Class

步骤四:在触发按钮点击事件的窗体中注册观察者并通知

最后,在触发按钮点击事件的窗体中,我们注册另一个窗体为观察者,并在按钮点击事件发生时通知它。

Public Class Form1
    ' ...

    Private Sub btnForm1B_Click(sender As Object, e As EventArgs) Handles btnForm1B.Click
        ' ...

        observable.NotifyObservers("btnForm1B")
    End Sub

    Private Sub btnForm1C_Click(sender As Object, e As EventArgs) Handles btnForm1C.Click
        ' ...

        observable.NotifyObservers("btnForm1C")
    End Sub
End Class

通过以上步骤,我们成功地使用观察者模式实现了窗体间按钮点击事件的解耦。这样,当一个窗体上的按钮被点击时,另一个窗体上的按钮可以接收到通知并执行相应的操作,而不需要直接耦合它们的点击事件处理逻辑。

希望本文能帮助您了解如何使用观察者模式来实现窗体间按钮点击事件的解耦,提高代码的灵活性和可维护性。

总结:

本文介绍了如何使用观察者模式来实现窗体间按钮点击事件的解耦。通过创建一个按钮观察者接口和一个按钮被观察者类,以及在另一个窗体中实现该接口作为观察者,我们可以轻松地跟踪已注册的观察者,并在按钮点击事件发生时通知它们。最后,在触发按钮点击事件的窗体中注册观察者并通知,从而实现窗体间按钮点击事件的解耦。这样,当一个窗体上的按钮被点击时,另一个窗体上的按钮可以接收到通知并执行相应的操作,而不需要直接耦合它们的点击事件处理逻辑。

使用观察者模式可以大大提高代码的灵活性和可维护性,特别是在需要处理多个对象之间的复杂交互的情况下。它可以将对象之间的依赖关系从代码中分离出来,使得修改一个对象不会影响其他对象,同时也方便添加新的观察者。因此,观察者模式被广泛应用于 GUI 设计、事件驱动系统、消息队列等领域。

希望本文能够帮助读者了解如何使用观察者模式来实现窗体间按钮点击事件的解耦,同时也能够对读者在日常的软件开发中有所启发。

不足之处,还望见谅!

标签:End,Sub,观察者,点击,窗体,按钮
From: https://www.cnblogs.com/zengzhanping/p/17869889.html

相关文章

  • VB.NET实现一键触发另一个窗体按钮点击事件的妙招
    为了温故而知新,本博客旨在记录我学习VB.net编程的过程,分享基础知识和实用技巧,帮助有需要的朋友轻松入门VB.net编程。无论您是想开发Windows平台上的应用程序,还是想在.NET生态系统中展现创造力和创新精神,本文都将为您提供宝贵的指导。在VB.NET中,我们经常需要在一个窗体上点击按钮......
  • bug:点击按钮
    问题场景点击按钮,父盒子会出现阴影。点击父盒子,页面有点击效果。但实际上父盒子没有绑定点击事件。模板代码<divclass="btn"v-if="showActions"><el-row:gutter="10"><el-col:span="1.5"><el-buttontype=&......
  • VB.net开发必备技能——两个窗体之间的数据传递方法!
    为了温故而知新,本博客旨在记录我学习VB.net编程的过程,分享基础知识和实用技巧,帮助有需要的朋友轻松入门VB.net编程。无论您是想开发Windows平台上的应用程序,还是想在.NET生态系统中展现创造力和创新精神,本文都将为您提供宝贵的指导。作为程序员,你一定曾经遇到过需要在不同窗体之......
  • 软件设计实验 21:观察者模式
    实验21:观察者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解观察者模式的动机,掌握该模式的结构;2、能够利用观察者模式解决实际问题。 [实验任务一]:股票提醒当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价......
  • echarts散点图默认选框,不用点击按钮再选框
    直接上代码HTML<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="utf-8"><title>BasicScatterChart-ApacheEChartsDemo</title></head><body><divid="chart-containe......
  • 【Java - 图形界面设计】窗体 && 组件 && 事件
    窗体窗体对象JFramepackagecom.EveX.frame;importjavax.swing.*;publicclassFrameTest{publicstaticvoidmain(String[]args){/*创建窗体*/JFrameframe=newJFrame();/*设置窗体大小,参数宽和高,单位:像素*/frame.set......
  • vue指令封装(按钮权限、loading加载、slideIn窗口进入动画)
    vue指令vue本身具有一些指令,但是有些指令是vue作者自己写的,有些是第三方插件写的。v-ifv-if指令是用来控制元素是否显示的,如果值为true,则显示,如果值为false,则隐藏。<divid="app"><pv-if="isShow">我是显示的内容</p><pv-else>我是隐藏的内容</p></div><scri......
  • 观察者模式--Java实现
    相关类图具体代码//Observer.javapackageorg.example.test019;publicinterfaceObserver{publicvoidbuy();publicvoidcry();}//Subject.javapackageorg.example.test019;importjava.util.ArrayList;publicabstractclassSubject{protect......
  • 观察者模式
    1模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易......
  • python 单击按钮弹出选择文件的窗口
    Python单击按钮弹出选择文件的窗口在编写Python程序时,有时我们需要让用户选择一个文件,例如读取文件内容进行处理,或者保存处理结果到指定的文件中。为了实现这个功能,我们可以使用tkinter库提供的文件选择对话框。tkinter库简介tkinter是Python的标准GUI库,可以用来创建各种图形用......