传统设计模式(二)观察者模式

观察者模式现在用的不是很多 重点看下它的设计思想 OK 下面继续 消息中心的那点事

/// <summary>
    /// 数据中心
    /// </summary>
    public class MessageData
    {

        public void messageSend()
        {
            string title = observer.getTitle();
            string content = observer.getContent();

            //针对具体实现编程,会导致我们以后再增加或者删除消息平台时 必须要重新维护Platformlist 有时甚至还要重构代码
            foreach (Platform p in observer.Platformlist)
            {
                p.update(title, content);
            }
        }
    }

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

上述情况在soa体系架构中凸显比较严重,基本上数据中心作为基站程序不适合版本经常更新

那么这和一对多得关系有何关联

利用观察者模式,数据中心是具体状态的对象,并且可以控制这些状态。也就是说,有“一个”具有状态的数据体。另一方面,观察者模式使用这些状态,虽然这些状态不属于他们。有许多的观察者,依赖主题来告诉他们状态合适改变了。这就产生了一个关系:“一个”数据中心对于“多个”消息发布者的关系。

松耦合的威力:当两个对象松耦合,他们依然可以交互,但是不清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。

/// <summary>
    /// 数据中心
    /// </summary>
    public class MessageData : MessageDateIF
    {
        private ArrayList observers;
        private string title;
        private string content;

        public MessageData()
        {
            observers = new ArrayList();
        }

        public void RegisterPlatform(observerIF o)
        {
            observers.Add(o);
        }

        public void RemovePlatform(observerIF o)
        {
            int i = observers.IndexOf(o);
            if (i > 0) { observers.Remove(i); }
        }

        public void NotifyPlatform()
        {
            foreach (observerIF o in observers)
            {
                o.update(title, content);
            }
        }

        public void MessageChanged(string title,string content)
        {
            this.title = title;
            this.content = content;
            NotifyPlatform();
        }
    }

    public interface observerIF
    {
        void update(string title, string content);

    }

    public interface MessageDateIF
    {
        void RegisterPlatform(observerIF o);
        void RemovePlatform(observerIF o);
        void NotifyPlatform();
    }

    public interface DisplayElemnet
    {
        void Display();
    }

    public class PlatformA : observerIF, DisplayElemnet
    {
        private string title;
        private string content;
        private MessageDateIF messagedata;

        public PlatformA(MessageDateIF messagedata)
        {
            this.messagedata = messagedata;
        }
        public void update(string title, string content)
        {
            this.title = title;
            this.content = content;
            Display();
        }
        public void Display()
        {
            Console.WriteLine("title:" + title + " content:" + content);
        }
    }

总结:为了对象之间的松耦合而设计。观察者模式定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有一拦着都会收到通知并自动更新

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, title
, public
, 观察者
, content
, void
$observe、$watch总结
观察者设计模式、观察者设计模式 java、设计模式中观察者模式、设计模式之观察者模式、ios观察者设计模式,以便于您获取更多的相关知识。

时间: 2024-11-07 14:05:17

传统设计模式(二)观察者模式的相关文章

Javascript设计模式之观察者模式的多个实现版本实例

 这篇文章主要介绍了Javascript设计模式之观察者模式的多个实现版本实例,本文给出3种实现版本代码,同时给出了Jquery实现版本,需要的朋友可以参考下     介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自己. 使用观察者模式的好处: 1.支持简单的广播通信,自动通知所有已经订阅过的对象. 2.页面载入后目标对象很容易与观

PHP设计模式之观察者模式实例_php实例

首先了解观察者模式的概念:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察.当可观察的对象更改时,它会将消息发送到已注册的观察者.这些观察者使用该信息执行的操作与可观察的对象无关.结果是对象可以相互对话,而不必了解原因.观察者模式是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作;观察者模式为您提供了避免组件之间紧密耦. UML结构图: 观察者模式解决的问题 在我们的开发过程中,应该

PHP设计模式之观察者模式示例介绍

 这篇文章主要介绍了PHP设计模式之观察者模式(Observer)详细介绍和代码实例,需要的朋友可以参考下 [意图]   定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新[GOF95] 又称为发布-订阅(Publish-Subscribe)模式.模型-视图(Model-View)模式.源-监听(Source-Listener)模式.或从属者(Dependents)模式   [观察者模式结构图]       [观察者模式中主要角色]   1.抽

乐在其中设计模式(C#) - 观察者模式(Observer Pattern)

原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:webabcd 介绍 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 示例 有一个Message实体类,某些对象对它的操作有Insert()方法,当发生某些改变的时候,通知所有这些对象并执行Insert()方法. MessageModel using

设计模式之观察者模式(Observable与Observer)

好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情形:有A.B.C.D等四个独立的对象,其中B.C.D这三个对象想在A对象发生改变的第一时间知道这种改变,以便做出相应的响应或者对策. 上面的这种情形,就是观察者模式. 当然可以有多个观察者,多个被观察者. 观察者与被观察者也不是对立的,一个对象可以观察其他对象,也可以被其他对象观察. 2.观察者模式的应用 为了更好的理解什么是观察者模式,下面我举一些可能用到该模式的情形或

【设计模式】—— 观察者模式Observer

模式意图 观察者模式,也叫发布/订阅模式,从名字来说就能察觉到它的过程应该是,发布--其他人接受. 这个模式定义了对象之间的一种依赖关系,当一个对象发生变化时,其他的对象收到更新,也发生变化. 模拟我们订阅邮件这个场景,不管我们的邮箱是在登陆还是关闭,邮件都会发送到邮箱里面.只要把自己的邮箱订阅到这个邮件就可以了!这个模式也是这样一个过程. 这个模式代码相对来说比较容易理解,而且应用很广泛. 应用场景 1 当一个模型有几个展现方面,通过修改一个展现,顺便更新其他的.就好比一个网站的有web端,也

设计模式(二):自己动手使用“观察者模式”实现通知机制

在之前发布Objective-C系列博客的时候,其中提到过OC的通知机制,请参考<Objective-C中的老板是这样发通知的(Notification)>这篇博客.在之前关于Notification的博客中,只介绍了Foundation框架中的通知的使用方式.正如前面博客中提到的那样,通知是"一对多的关系",类似于广播.一个人发通知,多个人接收.这也就是设计模式中的"观察者模式".接收者的一方是Observer(观察者),而发送方是Subject(主题

设计模式之观察者模式(Observer Pattern)(二)

server|设计 在上例子中传递的信息是一个字符串,当我们点击其中一个radio button,我们可以得到这个radio button的名称(Red Blue Green),将这个名称发送到观察者(Observer). Observer提供一个对目标主体(Subject)抽象连接,一个目标主体(Subject)不知道他的观察者(Observer)的任何信息,但是当他改变时可以更新通知发送到各个注册过的观察者(Observer). 我们也可以使用委托(Delegate)来实现Observer模

学习JavaScript设计模式之观察者模式_javascript技巧

一.定义 观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. 在JavaScript中,一般使用事件模型来替代传统的观察者模式. 好处: (1)可广泛应用于异步编程中,是一种替代传递回调函数的方案. (2)可取代对象之间硬编码的通知机制,一个对象不用再显示地调用另外一个对象的某个接口.两对象轻松解耦. 二.DOM事件–观察者模式典例 需要监控用户点击document.body的动作,但是我们没有办法预知用户将在什么时间点击