zoukankan      html  css  js  c++  java
  • 设计模式一(续)

    本篇是接着设计模一:观察者模式的续写。

    为什么要写这一篇呢:

    java在main函数里new出的对象都是局部变量,而用C++ 在main函数里new出来的都是 动态分配到堆区的。

    那么可不可以按照java的思路来写呢。

    这就是写本篇的原因了:C++完全可以按照java的思路来实现(使用引用)

    附上代码:

    #include "stdafx.h"
    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    class Observer;
    class Subject;
    class Subject
    {
    public:
        Subject()
        {
            msg="orinal msg";
        }
        void add(Observer &ob)
        {
            vec.push_back(ob);
        }
        void show()
        {
            cout<<"broadcast:msg is:"<<msg<<endl;
        }
        void change(string msg)
        {
            this->msg=msg;
            notification();
        }
        void notification();
    private:
        vector<Observer> vec;
        string msg; 
    
    };
    class Observer
    {
    public:
        Observer(Subject &sub):sub(sub)
        {
    
            this->sub.add(*this); //这里使用了*this  this指的是指向对象本身的指针,*this 指的是对象本身。
        }
        void Showdate()
        {
            sub.show();
        }
    private:
        Subject &sub;
    };
    void Subject::notification()
    {
            vector<Observer>::iterator v = vec.begin();
             while( v != vec.end()) {
                 (*v).Showdate();
                 v++;
          }
     }
    int _tmain(int argc, _TCHAR* argv[])
    {

        Subject sub;
        Observer ob1(sub);
        Observer ob2(sub);

        sub.change("asdasd");

         return 0;
    }

    这里使用了引用类型,引用类型 的格式 TYPE &A =XXX,之所以称为引用 指的就是该引用变量和变量本身是同一块内存单元。

    这样就与JAVA相同了。这种写法和之前那篇文章的写法的区别之一就是 本文所用变量皆为局部变量。

    之前的文章为什么要用指针呢,因为在传递参数时如果不用指针那么函数内部操作的实际上是局部变量(该程序对局部变量的操作没有意义)

    而使用引用完全可以做的和指针相同的功能,区别只是内存分配的问题。

    需要注意一点的是 如果类的成员变量是引用类型,那么引用类型只能用初始化表的形式初始化。

  • 相关阅读:
    深圳移动 神州行(大众卡/轻松卡/幸福卡)套餐资费(含香港日套餐)信息及使用方法
    PHP设置时区,记录日志文件的方法
    微信公众平台消息接口使用指南
    C#日期时间格式化
    使用CMD实现批量重命名[转]
    Python高效编程技巧
    实用WordPress后台MySQL操作命令
    ubuntu-wine
    Javascript 笔记与总结(2-8)对象2
    Swift5.3 语言指南(十) 枚举
  • 原文地址:https://www.cnblogs.com/mryrs/p/6820319.html
Copyright © 2011-2022 走看看