本帖最后由 cyshen 于 2010-05-14 14:26:41 编辑

解决方案 »

  1.   

    我有限理解是 对于客户而言,他们的身份决定了他们只关心产品本身而不是建造过程,因此屏蔽建造细节,只暴露产品接口给客户,将耦合降至最低是很有必要的。由此产生的效果就是客户只面向接口而非实现,产品建造的任何改动或升级已与客户无关,使其使用方便,易于维护。使用到的设计原则可能是:Program to an interface, not an implementation
    ps:这里的接口是普遍意义上的抽象概念接口,而非特指java中的接口
      

  2.   

    补充还有使用工厂方法比直接new的另外两优点:1.可控性更好
    建造过程在你控制范围内2.可读性更好
    getter之类的对客户而言更友好些
      

  3.   

    如果你的ImplementationaTwo ()创建实例所需要的大量初始化工作,使用工厂就可以将初始化工作从其构造函数中分离出去。
    还有就是如果你要再有类似的ImplementationaTwo ()这种对象的话,方便统一管理什么的。可以看下DAOFactory这种例子,优点就更明显了,你这例子看不太出来。。
      

  4.   

    通过静态工厂方法创建对象实例(自己),这样会给我们带来什么样的好处?它比直接
    Service imp=new ImplementationaTwo () 创建对象的实例有哈好处?
    工厂模式,它的真正用途是什么?
    =========
    简单点来说就是为了将对象的创建和使用相分离,以实现开闭原则(对扩展开放,对修改关闭)。
    因为对象的创建方式是否改变无法由程序定性控制,而对于对象的使用我们却可以固定下来。
    因此,对于开闭原则中的“开放”是指对对象创建方式的扩展留有余地,而其中的“关闭”则是指固定的部分(对象的使用)这一个方面能够成为常态!而new操作必须涉及到一个具体的对象,当超类(抽象类或接口)的实例对象有所改变时,必然影响到使用子类的地方。这样便增加了程序的耦合!而使用工厂模式则把对象创建方式专门提取出来以应付变化!