最近读了《effective java》中的用静态工厂方法代替构造方法的内容,觉得不理解,没有更明显的示例代码,希望能得到更好说明的代码,谢谢各位。
  另希望能说明静态工厂方法的使用范围(在什么情况下适合使用,在什么情况下不适合使用),觉得书上写得太简单,不能完全理解。

解决方案 »

  1.   

    比如,由于某种情况,你要控制类对象的个数,只能产生1个对象,而用构造器可能会产生很对对象,这样就不符合实际情况了。可以选择静态工厂模式.
    public class Factory {
    private static int count=0;
    private Factory(){}
    public static Factory getFactory(){
    if(count<1)return new Factory();
    return null;
    }
    }这样你就只能通过Factory 的getFactory方法得到唯一实例了。
      

  2.   

    你说的就是《研磨设计模式》中的简单工厂模式,它不是Gof的23个模式,但是很常用,大致的写法如下:
    简单工厂示例代码
    (1)先看看Api的定义,示例代码如下:1./**  
    2. * 接口的定义,该接口可以通过简单工厂来创建  
    3. */  
    4.public interface Api {   
    5.    /**  
    6.     * 示意,具体的功能方法的定义  
    7.     * @param s 示意,需要的参数  
    8.     */  
    9.    public void operation(String s);   
    10.}  
     (2)定义了接口,该来实现它了,ImplA的示例代码如下:1./**  
    2. * 接口的具体实现对象A   
    3. */  
    4.public class ImplA implements Api{   
    5.    public void operation(String s) {   
    6.        //实现功能的代码,示意一下   
    7.        System.out.println("ImplA s=="+s);   
    8.    }   
    9.}  
     ImplB的示意实现和ImplA基本一样,示例代码如下:1./**  
    2. * 接口的具体实现对象B   
    3. */  
    4.public class ImplB implements Api{   
    5.    public void operation(String s) {   
    6.        //实现功能的代码,示意一下   
    7.        System.out.println("ImplB s=="+s);   
    8.    }   
    9.}  
     (3)该来看看简单工厂的实现,示例代码如下:
    1./**  
    2. * 工厂类,用来创造Api对象  
    3. */  
    4.public class Factory {   
    5.    /**  
    6.     * 具体的创造Api对象的方法  
    7.     * @param condition 示意,从外部传入的选择条件  
    8.     * @return 创造好的Api对象  
    9.     */  
    10.    public static Api createApi(int condition){   
    11.        //应该根据某些条件去选择究竟创建哪一个具体的实现对象,   
    12.        //这些条件可以从外部传入,也可以从其它途径获取。   
    13.        //如果只有一个实现,可以省略条件,因为没有选择的必要。   
    14.  
    15.        //示意使用条件   
    16.        Api api = null;   
    17.        if(condition == 1){   
    18.            api = new ImplA();   
    19.        }else if(condition == 2){   
    20.            api = new ImplB();   
    21.        }   
    22.        return api;   
    23.    }   
    24.}  
     (4)再来看看客户端的示意,示例代码如下:
    1./**  
    2. * 客户端,使用Api接口  
    3. */  
    4.public class Client {   
    5.    public static void main(String[] args) {   
    6.        //通过简单工厂来获取接口对象   
    7.        Api api = Factory.createApi(1);   
    8.        api.operation("正在使用简单工厂");   
    9.    }   
    10.} 转抄自《研磨设计模式》,好书啊,更详细的,还是看书去理解吧
      

  3.   

    谢谢两位的回复,但是这都是两位说的似乎是〈设计模式〉中的工厂模式,并不是我想要的答案,如果可以希望两位读一下effective java这本书,或许会明白我的疑问,谢谢