首页 > 代码库 > 买面包与IoC

买面包与IoC

        今天早上准备去一个阿姨那里买面包。可能是因为她的规模不大,因此管理不太规范化,因此去买面包时,没有人排队,即使都是大学生,似乎也没这个意识。。。

        但让我感到震惊的是,虽然没有排队,但阿姨似乎可以保证我们买面包的公平性。方法是去买面包的人,谁先叫买什么,阿姨就会先卖给谁。不管你后来来买的人叫得都么宏亮,

阿姨都会先卖给先叫的人。阿姨把每个人的顺序都记住了,然后按这个顺序给我们卖面包。

        对于这种方式,我个人是不赞同的。首先是如果人多了,阿姨可能就会很麻烦。其次,这种方式容易导致客户不满的情绪。因为“队列”在阿姨的脑袋里,客户看不到,对于新来的客户,

可能会有点反感,熟客可能就会理解。所以还是希望阿姨能换种方式(其实作为大学生的我们,为什么不自觉排队呢)。

        阿姨买面包的方式让我想起了IoC。以前学习Spring的时候,对这个概念特别不理解。有时甚至发现,学习Struts2和Hibernate的时候,都能大概知道他们做什么,而对于Spring,却不知道

可以做什么,后来学到设计模式和软件工程,才对Spring有一丁点理解。

        首先我说说我理解中的IoC是什么。IoC,英文全称是Inversion of Control,Inversion在英文里的意思是:n. 倒置;反向;倒转

如果按这样理解,IoC就是让控制进行反转的东西,那么是对什么控制呢?后来了解到是对对象的创建的控制。

例:

--------------------------------

我们平时编程,创建一个对象是这样创建的:

Object obj = new Object() ;

这是一种直接的控制,我想new什么就new什么,对象创建的控制权在我手中。


而如果使用了Spring框架之后,对象就是这样创建的:

Object obj = beanFactory.getBean("obj") ;

对象不能由自己new了,而是交给了IoC容器new了。程序中发送一条"obj"的话,IoC容器就根据这句话,给我们返回一个我们需要的对象。借用书本上引用好莱坞的一句话:"Don‘t call me, I‘ll call you."

不需要自己创建对象,只要你告诉容器,容器帮你创建。


以上是我理解的IoC,有点像今天的买面包。我们把买东西要排队这个规矩定为一个类.


当我们自觉排队时,

QueueRole role = new QueueRole() ;
当我们不需要排队,阿姨帮我们排好队时:

QueueRole role = 阿姨.getBean("排队") ;

这样,我们也可以享受到排队这个对象,只不过对象由阿姨帮我们创建了而已。


以上就是我今天买面包引发的思考,如果其中有错误的地方,希望大家指出。