`
touchmm
  • 浏览: 1038458 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JavaScript中IOC【Inversion of Control】模式和AOP模式、观察者模式的交融

阅读更多

注:本文中部分描述都是操作我的书《JavaScript高级应用与实践》而言,还请朋友们多多支持我的书,详情请见:

博主网站地址:

http://m9m.3322.org/doc/js/md00.jsp

“北京电子工业出版社”地址

http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP061230%20&booktype=main

这里讲的IOC模式是指,一种很容易切入已有对象或类的模式,使得你的设计能很好的监视、改变现有设计的运行过程、结果。
注意:再次重申一下,JS中的对象和类的概念非常模糊,类也是一种对象,不过它区别于对象的特征是,可以直接使用new运算符号来
产生多个不同的、互不干扰的对象实例,而对象要产生多个互不干扰的对象实例,只能通过深度克隆。
// 有的人说JAVA的IOC是通过工厂类来实现,也就是同样的方法传入不同的类名获取到不同的对象实例,其实不然。
低侵入性似乎也成了判定一个框架的实现技术好坏的标准之一,而IOC则是通过依赖注入来实现其"好莱坞原则"
【不要给我们打电话,我们会给你打电话(don't call us, we'll call you)。可以理解为:被动调用原则】。

AOP【Aspect Oriented Programming】模式
面向方法编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
是OOP模式的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际也是GoF设计模式的延续,
设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
Java的AOP的实现方式之一是实现接口IntroductionInterceptor、MethodInterceptor来实现动态代理的。

// o 是需要IOC控制的对象,或类【类的时候只能对原型进行IOC】
// func 你编写的Filter方法,也叫IOC控制函数
// arD 一般调用的时候用null,函数内部使用
// bPrototype为真表示只对其原型进行处理
var IOCReflect = function(o, func, bFlg, arD, bPrototype)
{
// 防止递归循环引用
arD || (arD = {"self": o});
if(bPrototype)
{
if(!!o["prototype"])
return;
o = o["prototype"];
}

for(var k in o)
{
if("function" === typeof o[k])
{
// 利用匿名函数保护_fnc的有效性直到o[k] = function()的无效为止。
// 不能在o[k] = function()里面直接用o[k]的原因是因为k接着下轮循环就变化了
(function()
{
var p = k, _fnc = o[p];
o[k] = function()
{
var a = [];
a = Array.apply(a, arguments);
// 对过滤函传入的参数是:函数名、被过滤的函数对象、被过滤的函数对象执行的参数
if(func.apply(o, [p, _fnc, a]))
_fnc.apply(o, a);
a = null;
};
})();
}
else if(bFlg && null !== o[k] && "object" === typeof o[k])
{
if(arD["self"] !== o[k] && !arD[k])
arD[k] = o[k], IOCReflect(o[k], func, !!bFlg, arD);
}
}
};

var myClass = {
name: "xiatian",
dsp: function()
{
var a = [];
a = Array.apply(a, arguments);
a.push(this.name);
alert(a.join("\n"))
},
other: {
name: "summer",
display: function()
{
var a = [];
a = Array.apply(a, arguments);
a.push(this.name);
alert(a.join("\n"))
}
}
};

IOCReflect(myClass, function()
{
// 参数获取
var a = [];
a = Array.apply(a, arguments);
alert(["监控中的方法名:" + a[0], "\n监控中的参数(这里还可以改变参数的内容):\n" + a[2].join("\n")].join("\n"));
a[2][1] = "夏天";
return true;
}, true);

// 测试一下递归引用
myClass["myobj"] = myClass;

// 执行看看
myClass.dsp("你的名字:", "顶级配置系统!?");
myClass.other.display("我的名字:", "你猜猜看,谁说了算?");

分享到:
评论

相关推荐

    IOC(inversion of control)

    IOC,即Inversion of Control,中文常被翻译为“控制反转”,是面向对象编程领域中的一个设计模式,尤其在Spring框架中广泛应用。控制反转是一种设计原则,它将对象的创建和组装过程从代码中分离出来,交给容器来...

    Spring中IOC(反转控 制) 和 AOP(面向方面编程)

    在Java世界里,Spring框架是应用最广泛的轻量级框架之一,它的核心特性包括IOC(Inversion of Control,反转控制)和AOP(Aspect Oriented Programming,面向方面编程)。这两个概念是Spring框架的灵魂,极大地提升...

    C#实现的IOC和AOP框架,供学习

    在现代软件开发中,依赖注入(IOC,Inversion of Control)和面向切面编程(AOP,Aspect-Oriented Programming)是两种非常重要的设计模式,它们有助于提高代码的可测试性、可维护性和模块化程度。这个名为...

    Java Spring代理模式AOP-IOC分析

    五、IOC(Inversion of Control) IOC是一种软件设计模式,旨在将对象的创建和管理从应用程序中分离出来。在Spring框架中,IOC容器负责创建和管理对象,并提供了一种机制来将对象注入到应用程序中。 六、Spring...

    IOC(DI)与AOP概念的理解

    IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是软件设计中两个重要的概念。控制反转的意思是依赖关系的获取方式被反转了。所谓依赖,从程序的角度看,就是比如A要调用B的方法,...

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    springioc和spring aop

    Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...

    Spring中IOC/AOP的说明和例子

    在Spring框架中,IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是两个核心的概念,它们极大地提高了软件开发的灵活性和可维护性。 **IOC(控制反转)**是Spring的核心...

    Spring中IoC优点与缺点解析

    IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 优点 1. 简化对象的创建:IoC ...

    Spring IOC和Spring AOP_spring aop_springIOC

    **Spring IOC(Inversion of Control)** Spring的IOC,也称为控制反转,它是一种设计思想,核心就是将对象的创建和管理权交给容器,而不是由代码直接创建。这样做的好处在于,开发者不再需要关心对象的生命周期,只...

    以注解方式模拟Spring IoC AOP

    在Spring框架中,依赖注入(Inversion of Control, IoC)和面向切面编程(Aspect Oriented Programming, AOP)是两大核心特性。本篇将深入探讨如何通过注解方式来模拟Spring的这两种机制,帮助你理解其底层原理。 #...

    unity ioc 和 aop 简单示例

    Unity是Microsoft推出的一款轻量级、可扩展的依赖注入(DI)容器,它在.NET开发中广泛用于实现Inversion of Control(IoC)设计模式。IoC是一种编程范式,其核心思想是将对象的创建和管理从应用程序的业务逻辑中分离...

    SpringIOC和AOP原理设计模式

    Spring框架的核心特性主要体现在Spring的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)上。这两个概念在实际的软件开发中扮演着非常重要的角色,能够极大地提高代码的...

    浅谈 Spring 原理 透析,ioc aop

    浅谈 Spring 原理 透析,IOC 和 AOP Spring 框架是一个从实际项目开发经验中抽取的,可高度重用的应用框架。它是一个轻量级容器,带有包装器,使许多不同的服务和框架更易于使用。轻量级容器接受任何 JavaBean,而...

    IoC容器和DependencyInjection模式

    人们用一个大而化之的名字来称呼这个模式:“控制反转”( Inversion of Control,IoC)。在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名 字——“依赖注入”(Dependency Injection),并...

    Spring的Aop和Ioc示例

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(IOC)和面向切面编程(AOP)功能闻名。在本示例中,我们将深入理解这两个核心概念。 **依赖注入(IOC)** 依赖注入(Inversion of Control)是...

    IOC和AOP深刻理解基础代码测试

    在Java Web开发中,IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是两个至关重要的概念,它们极大地提升了代码的灵活性和可维护性。Spring框架是实现这两种设计模式的...

    ioc AOP深入了解

    ### IoC (Inversion of Control) 深入理解 #### 一、IoC 基础 IoC,即控制反转,是一种设计思想,在软件工程领域被广泛应用于解决对象间依赖关系的问题。传统的编程模式中,对象创建自身依赖的对象并调用它们,而...

    java Spring代理模式AOP-IOC结合

    代理模式和 AOP 是软件开发中非常重要的概念和技术,它们可以帮助我们将非功能性需求与业务代码分离,提高代码的可维护性和可扩展性。Spring 提供了一个强大的 AOP 框架和 IoC 容器,可以帮助我们轻松实现代理模式和...

Global site tag (gtag.js) - Google Analytics