Code Control MVC框架-发消息

本文介绍如何使用CodeControl框架中的全局消息系统发送和接收消息。通过解耦类之间的直接依赖,使得代码更易于理解和维护。同时展示了如何创建自定义消息类来传递更多数据。

蛮牛地址:http://www.manew.com/thread-50564-1-1.html
官方地址:http://unitycodecontrol.com/tutorials/
一下内容根据自身理解,以及原文重新翻译了教程文档。并修复了其中我认为的一些错误。

Code Control MVC框架-发消息

介绍

这篇教程教我们如何使用Code Control的全局消息系统去发送和接收消息。使用它会保持你的类解耦并发动令人激动的 Message Flow可视化监视器!
(这个框架里面实现一些可视化的功能,可以把一些代码或者我们无法洞悉的东西以可视化的方式展现出来,让我们清楚的看到其工作原理,这个消息系统就是其中一个,详细的你可以导入到你的工程中去查看。)
如果这是你第一次使用Code Control我们建议你从第1篇开始读。

Sending a Message 发送一个消息

发送消息可以简单地使用Message类来实现。

public class GameController : Controller<GameModel> {

    protected override void OnInitialize() {

        // Send a global message
        //发送一个全局消息
        Message.Send("Hello World!");
    }
}

这会使GameController发送一个“Hello World!”的全局消息。他不知道谁正在听这个消息,但这就是解耦的要点所在。不需要知道谁在听!

为什么控制层应该通过一个消息系统来交流?

控制层不需要相互引用来确保它们不是紧耦合。紧耦合意味着彼此之间有大量的依赖。紧密耦合的类是很难理解的并且很难去重构。一个全局的消息系统避免了直接的依赖并保持代码易于改变和理解。尽管全局消息的大问题是不知道哪些类在彼此之间通信。但是幸运地,那就是Code Control的Message Flow监视器派上用场的地方!

Handling a Message 处理消息

发送一个消息如果没有东西在听就没有多大意义了。我们还是再建一个控制器好了,但这一次是要听“Hello World!”消息。

public class WorldController : Controller<WorldModel> {

    private void Awake() {

        // Listen to the global message and call the OnHelloWorldMessage when it is send
        //监听全局消息并在消息被发送的时候调用OnHelloWorldMessage方法
        Message.AddListener("Hello World!", OnHelloWorldMessage);

    }

    private void OnHelloWorldMessage() {
        // "Hello World!" has been called!
        //“你好,世界!”被调用了!
        // Stop listening to the message
        //停止监听这个消息
        Message.RemoveListener("Hello World!", OnHelloWorldMessage);
    }
}

使用AddListener()方法WorldController主动开始监听这个“Hello World!”的消息并在消息发送的时候调用OnHelloWorldMessage()方法。在这个例子里面,WorldController在使用 RemoveListener()方法处理它后立即停止监听“Hello World!”消息。

Custom Messages 自定义消息

有时发送一个字符串类型的消息是不够的,并且更多的值需要被发送。消息类可以派生成一个自定义的类来添加额外的字段。我们一起来看一个例子!

public class ResponseMessage : Message {

    public bool IsPositive;
    public string Text;
}

ResponseMessage派生自Message类并添加额外的IsPositive和Text字段。WorldController现在可以使用ResponseMessage响应“Hello World!”消息。

public class WorldController : Controller<WorldModel> {

    /* Previous code 我是之前的代码*/

    private void OnHelloWorldMessage() {

        // Instantiate a ResponseMessage
        //实例化一个ResponseMessage
        ResponseMessage m = new ResponseMessage();

        // Assign values to the ResponseMessage's fields
        //赋值给ResponseMessage的字段
        m.IsPositive = true;
        m.Text = "Good morning, GameController!"

        // Send the ResponseMessage with its assigned values
        //发送被赋值的ResponseMessage 
        Message.Send<ResponseMessage>(m);
    }
}

WorldController实例化一个新的ResponseMessage,给其赋值并发送给任何在听的对象。欧,关于这个……我们来看看GameController是如何监听一个这样的自定义消息吧!

public class GameController : Controller<GameModel> {

    /* Previous code 我是之前的代码*/
    private void Awake() {

        // Listen to the custom global message ResponseMessage and call the OnResponseMessage when it is send
        //监听自定义全局消息 ResponseMessage并在它被发送的时候调用 OnResponseMessage
        Message.AddListener<ResponseMessage>(OnReponseMessage);
    }

    private void OnResponseMessage(ResponseMessage m){

        // Check if the response is positive
        //检查回应是否是肯定的
        if (m.IsPositive){
            // Stop listening to the OnResponseMessage
            //停止监听 OnResponseMessage
            Message.RemoveListener<ResponseMessage>(OnResponseMessage);
        }
    }
}

GameController用AddListener()方法来开始监听所有我们的自定义ResponseMessage消息并使用OnResponseMessage()方法来处理一个发送的消息。在OnResponseMessage()方法里面,第一个参数包含和消息一起被WorldExample设置的值。在这个栗子里面,WorldController检查 ResponseMessage是否是肯定的,并且只有那时才会停止监听。

Conclusion 小结

在这个教程里面我们学会了如何发送和监听消息,并且我们将消息派生成一个可以在里面添加额外的字段自定义类。

提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值