RT

解决方案 »

  1.   

    恩,具体的问题是,偶想用静态工厂模式,可是如果用这种模式的话,将来要添加具体的产品时要修改工厂类。所以这样不符合开闭原则,只能说是在客户端上符合开闭。但是有个好处就是这工厂中的方法可以是静态的(因为是具体工厂),直接用类名.方法就OK了。
    后来偶又改用工厂方法,就是把原来具体工厂抽象成一个接口或是抽象类A,然后具体工厂类B实现或继承这个A,但是由于A中不能有static的方法。所以在使用具体工厂B时需要B b=new B();或是class.forname之类的,可是偶非常不爽这样,有什么办法呢?
      

  2.   

    你看到的都是这两个模式的不足之处,
    工厂方法是支持开闭原则的,一个工厂对应一个产品,当你新增产品时,只需增加一个工厂即可。至于使用方面,new factory() 和factory.getInstance()也没太大区别吧?只不过多写一句话。
      

  3.   

    偶承认偶有点完美主义了,呵呵。只是偶认为在使用工厂方法的时候,应该尽量避免在客户端做创建的工作,如果用new Factory()或是factory.getInstance()的话,这样工厂的创建的职责就归到了客户端,偶想要个纯消费的客户端。
    谢谢 oracs(有技术没约束)  的回复!