使用工厂模式,我觉得好处是把对象的创建集中到了一处,避免对象的创建分散到整个应用。其实在这里,对象的创建,或者说“注射”,是一个Cross-Cut。使用工厂模式或pico之类的容器管理对象的创建,其本质上是一致的,都是为了把易变的部分分离出来,使之发生变化,不会对系统的其他部分造成影响,而且使这一部分发生变化时,很容易改变。这其实和设计模式的本质是一致的。不必要去争一些条条框框,像套公式一样,不必要。我们真正要学的是人家如何对问题进行分析,如何抽象,如何思考。如果我们总是使用别人的思考结果,在这里争论,永无出头之日。
请教一个问题
在spring中,一个A对象依赖一个接口,这个接口有几个具体实现(b,c,d),向A对象中注入依赖时如何选择注入(b,c,d)。最简单的策略模式的应用
我怎么总是觉得
import org.apache.commons.logging.Log;
public class LogSwitcher
{
  protected Log m_log;
  public void enableLogging(Log log) {
    m_log = log;
    m_log.info("Logging Enabled");
  }
}

public class PicoUserManager extends LogSwitcher
{
  ..... //用户管理功能
}
public class PicoXXXX1Manager extends LogSwitcher
{

  ..... //业务功能
}
public class PicoXXXX2Manager extends LogSwitcher
{

  ..... //业务功能
}
只是Template模式而已,因为每个类都必须继承自LogSwitcher
而且logging.enableLogging(new SimpleLog("pico"));//激活log
如何能产生具体的日志信息,我的理解是每个类产生的日志信息
完全可能是不一样的,不用在每个类里面写代码,而直接使用Log类
如何能达到日志记录的目的,至少Log类应该在适当的时候有机会
调用写日志方法,是用什么通知机制呢

本文内容和思想和Martin Fowler的文章都很象,作者自己不指出这点,文风极不严肃,有剽窃嫌疑。
ioc又不是什么了不起的发明。成千上万的人早就在做了。只不过没有给它起一个好名字而已。

说人剽窃,是要证据的。比如行文,或者例子。说思想相似,只能说是英雄所见或者殊途同归。

看了这么久,理解了AJOO大概问的是2个问题

1个是PICO的注册方式和你的NEW方式,相比前者要麻烦很多,后者简便。

2是XML指定PICO规定了不能是工厂,限制了你的代码灵活。


对于第1个,我也不懂,说一下我的看法。
我第一感觉是PICO处理的很清晰,很条理,你的NEW确实方便,但我认为不规范。框架要面向客户,如果自己可能真的就NEW了。当然还有你所发现的动态优势。

第2个我觉得你是走了极端,自己给自己找麻烦,嘿嘿,不介意我这么说吧,PICO不完美,但你说的这个好象用到的人不多,所以不是很重要的因素吧。

说的可能都是谬论,望各位专家指教。

怎么都在为技术而技术,而不考虑要干什么?
看了你的文章之后,本来很明白的,被你搞得惑了:

Service Locator 并非(Dependency Injection)的一种:
http://www.martinfowler.com/articles/injection.html#InversionOfControl

As a result I think we need a more specific name for this pattern. Inversion of Control is too generic a term, and thus people find it confusing. As a result with a lot of discussion with various IoC advocates we settled on the name Dependency Injection.

三种注入形式:
1. Constructor Injection 构造注入,就是把接口从构造方法中传进去。
2. Setter Injection Setter注入,就是把接口从setXxxx方法传给需要的对象
3. Interface Injection 接口注入,与其说是“接口注入”还不如说是用某一个特定的方法注入(就是名称不是以set开头)。

Service Locator vs Dependency Injection

1. 它们都是消除程序与组件间依赖的两种不同的方式。
2. Service Locator要求程序通过某一种程序入口找出特定的组件界面(接口)然后进行访问;而“依赖注入”这是由容器根据某一种配置文件,将对象需要的组件接口传递给该对象。

所以你的文章中关于Service Locator是依赖注入的一种方式,真的不敢苟同。

可不可以这样理解。
Ioc是一种Builder Factory呢?简单的理解,不就是如何灵活的创建一个对象。