AngularJS中介者模式实例

在任何应用程序中,中介者模式随处可见。

→ 有一个事件源,触发事件,传递参数
→ 中介者记下这个事件,向外界广播,并带上参赛
→ 有一个地方侦听中介者事件,一旦事件源触发事件,就从中介者手里获取事件相关参数

本篇,要体验的是在AngularJS中的中介者模式。

场景是:当创建一个订单,需要引发一些动作,比如给用户发邮件等。

AngularJS中有没有相关的方法呢?

--有,$emit方法用来向上级Scope广播事件,$on方法用来侦听事件。

首先在$rootScope层面封装一个中介者。

.factory(‘$emit‘, function($rootScope) {
    return function() { $rootScope.$emit.apply($rootScope, arguments); };
})

有一个定单,把创建定单看作是事件源,创建定单的时候,让中介者记下事件名称,并带上参数。

//创建一个Order实例,也是事件源
.factory(‘Order‘, function($emit) {
    function Order() {
        this.email   = ‘[email protected]‘;
        this.product = ‘Macbook Pro‘;
        $emit(‘order:created‘, this);
    }
    return Order;
})

让$rootScope侦听中介者的事件名称。

.run(function($rootScope, Email) {
    //让$rootScope侦听事件
    $rootScope.$on(‘order:created‘, function(event, order) {
        new Email(‘Email sent to ‘ + order.email + ‘ for ‘ + order.product);
    });
});

以上,Email在$rootScope侦听到order:created事件调用回调函数后使用到,这里用来弹出窗口。

//创建一个Email实例,弹出窗口显示信息
.factory(‘Email‘, function($window) {
    function Email(text) {
        $window.alert(text);
    }
    return Email;
})

controller中提供一个函数用来创建定单实例。

.controller(‘MainCtrl‘, function($scope, Order) {
    //产生一个新订单
    $scope.newOrder = function() { new Order(); };
})

前端就是调用:

<a class="btn btn-lg btn-primary" role="button" ng-click="newOrder()">Place new order</a>

完整代码如下:

angular
    .module(‘app‘, [])
    .controller(‘MainCtrl‘, function($scope, Order) {
        //产生一个新订单
        $scope.newOrder = function() { new Order(); };
    })
    .factory(‘$emit‘, function($rootScope) {
        return function() { $rootScope.$emit.apply($rootScope, arguments); };
    })
    //创建一个Order实例,也是事件源
    .factory(‘Order‘, function($emit) {
        function Order() {
            this.email   = ‘[email protected]‘;
            this.product = ‘Macbook Pro‘;
            $emit(‘order:created‘, this);
        }
        return Order;
    })
    //创建一个Email实例,弹出窗口显示信息
    .factory(‘Email‘, function($window) {
        function Email(text) {
            $window.alert(text);
        }
        return Email;
    })
    .run(function($rootScope, Email) {
        //让$rootScope侦听事件
        $rootScope.$on(‘order:created‘, function(event, order) {
            new Email(‘Email sent to ‘ + order.email + ‘ for ‘ + order.product);
        });
    });
时间: 2025-01-08 02:00:11

AngularJS中介者模式实例的相关文章

中介者模式:联合国实例

中介者模式:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变之间的交互.注:如果中介者类出现问题,那么整个系统都会有问题了.中介者模式优缺点:中介者的出现减少了各个国家的耦合,使得可以独立地改变和复用各个国家类和中介者类.由于把对象如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度去看待系统.由于中介者类控制了集中化,于是就把交互

第19章 行为型模式—中介者模式

1. 中介者模式(Mediator Pattern)的定义 (1)定义:用一个中介对象来封装一系统对象交互.中介者使得各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.       ①中介者模式主要用来将同事类之间网状结构变为星状结构,使同事类之间的关系变的清晰一些. ②所有对象只跟中介者对象进行通信,相互之间不再有联系,这样也能够集中控制这些对象的交互关系. (2)中介者模式的结构和说明 ①Mediator: 中介者接口.在里面定义各个同事之间交互需要的方法,可以

设计模式开始--中介者模式

中介者模式 一.问题 用一个中介对象来封装一系列对象的交互,好多对象之间交互,会形成错综复杂的网络,类和类之间相互引用,表现形式是多对多,为了改变这种紧耦合的情况,引入中介者,用中介者与各个类进行交互,形成一个星形的网络,中介者在星形网络的中间,其余的对象组成网络的每一个边 二.类图和实例 (1)未使用中介者(联合国)之前的国与国家之间的联系 (2)使用了中介者之后,国与国之间联系通过联合国进行联系 (3)类图设计 三.实现 (1)抽象中介者用于定义格式 具体中介者用于定义那几个类之间有关系,他

【设计模式】中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 介绍 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理. 何

[设计模式]中介者模式

1. 定义 用一个中介者对象来封装了一个系列对象的交互,中介者使得各个对象可以不需要显式的引用,而且可以独立改变对象之间的交互. 中介者模式思路很简单,中介者模式中通过引入一个中介者对象,让其他对象与中介者对象进行交互,而中介者对象知道如何和所有对象交互,这样对象之间的交互关系就没有了,从而实现对象之间解耦. 每个同事对象发生了变化,不需要知道这样会引起其他对象什么变化,只需要通知中介者,由中介者去与其他对象交互.这样的松耦合带来的好处是,同事对象之间的交互关系减少,而且有利于功能的修改和扩展.

设计模式之中介者模式(Mediator)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

Java设计模式菜鸟系列(二十二)中介者模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40027109 中介者模式(Mediator):主要用来降低类与类之间的耦合的,因为如果类与类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改. 一.uml建模: 二.代码实现 /** * 中介者模式(Mediator):主要用来降低类与类之间的耦合的,因为如果类与类之间有依赖关系的话, * * 不利于功能的拓展和维护,因为只要修改一个对象,其它

设计模式学习总结(23) 中介者模式

本系列主要记录设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它:它是怎样解决的,掌握它的结构图,记住它的关键代码:可以想到至少两个它的应用实例,一个生活中的,一个软件中的:这个模式的优缺点是什么,其有哪些使用场景,在使用时要注意什么. 尊重作者,转载请注明晔阳的Bloghttp://blog.csdn.net/hacke2 23.中介者模式 意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不须要显式地相互引用,从而使其耦合松散,并且能够独立地改变它们之间的交互. 主要解决

大话设计模式—中介者模式

中介者模式(Mediator Pattern)是用来减少多个对象和类之间的通信复杂性. 这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合.使代码易于维护. 中介者模式属于行为型模式. 引言: 虽然一个系统切割成很多对象通常能够添加其可复用性.可是对象间相互连接次数的添加又会减少其可复用性:大量的连接使得一个对象不可能在没有其它对象的支持下工作.系统表现为一个不可切割的总体,所以,对系统的行为进行不论什么较大的修改就十分困难了. 要解决这种问题.我们能够使用 迪米特原则 ,假设