设计模式——观察者模式

一、定义

观察者模式是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。主要解决的问题是,在一个一对多的依赖关系中,当"一"变化的时候,依赖这个"一"的多也能够同步发生改变。

1. 优点

1)观察者和被观察者是抽象耦合的;

2)建立一套触发机制。

2.缺点

1)如果一个被观察者对象有很多的直接和间接的观察者,将所有的观察者都通知到会花费很多时间;

2)如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃;

3)观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

3.示例

 

#include <iostream>
#include <list>
#include <string>
 
using ::std::list;
using ::std::string;
 
class Observer
{
public:
    Observer() {}
    virtual ~Observer() {}
    virtual void update() {}
};
 
class Subject
{
public:
    Subject(){}
    virtual ~Subject() {}
    void attach(Observer *observer)
    {
        m_observers.push_back(observer);
    }
    void remove(Observer* observer)
    {
        m_observers.remove(observer);
    }
    void notify()
    {
        list<Observer*>::iterator iter = m_observers.begin();
        for(;iter != m_observers.end(); iter++)
            (*iter)->update();
    }
    virtual void setStatus(string s)
    {
        m_status = s;
    }
    virtual std::string getStatus()
    {
        return m_status;
    }
private:
    list<Observer* > m_observers;
protected:
    std::string m_status;
};
 
class ClassSubject: public Subject
{
public:
    ClassSubject(string name):m_name(name) {}
    ~ClassSubject() {}
    void setStatus(string s)
    {
        m_status = s ;
    }
    string getStatus()
    {
        return m_status;
    }
private:
    string m_name;
};
 
class ClassObserver : public Observer
{
public:
    ClassObserver (string name,Subject *subject):m_name(name),m_subject(subject)
    {
    }
    ~ClassObserver () {}
    void update()
    {
        std::string status = m_subject->getStatus();
        cout << m_name  <<"-------" << status <<endl;
    }
private:
    std::string m_name;
    Subject *m_subject;
};

 

 

 

 

#include "observer.h"
int main()
{
    Subject *subject = new ClassSubject("huamoxian");
    Observer *observer = new ClassObserver("hello",subject);
    subject ->attach(observer);
    subject ->setStatus("说话!");
    subject ->notify();
    system("pause");
    delete subject ;
    delete observer;
    return 0;
}

 

 

 

 

 

MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值