回 帖 发 新 帖 刷新版面

主题:静态工厂模式

我的网址:www.javaedu.com.cn

QQ:2535279 


所谓静态工厂方法,就是返回类的一个实例的静态方法.
静态工厂方法的优点是:
1.静态工厂方法具有名字
2.每次被调用的时候不要求非得创建一个新的对象.
3.可以返回一个原返回类型的子类型的对象
静态工厂方法的缺点是:
1.类如果不含公有的或者受保护的构造函数就不能被子类化
2.比其他静态方法没有区别,不能标志它们的特殊性

闲话少叙,我们来看看静态工厂方法怎么来实现.我们来举个例子:


public class Cat{

private String name;
private String color;
private String host;


/* ......
getter/setter方法
*/

public Cat(){
}

public Cat(String name,String color,String host){

this.name = name;
this.color = color;
this.host = host;
}

        //知道名字,颜色和主人名字的时候调用的静态方法
public static Cat getCatwithFullinfo(String name,String color,String host){

return new Cat(name,color,host);
}

//不知道任何信息的时候调用的静态方法
public static Cat getCat(){

return new Cat();
}

//只知道名字的时候调用的静态方法
public static Cat getCatwithName(String name){

return new Cat(name,"","");
}

//只知道颜色的时候调用的静态方法
public static Cat getCatwithColor(String color){

return new Cat("",color,"");
}

//只知道主人名字的时候调用的静态方法
public static Cat getCatwithHost(String host){

return new Cat("","",host);
}

//知道名字和颜色的时候调用的静态方法
public static Cat getCatwithNameColor(String name,String color){

return new Cat(name,color,"");
}

//知道名字和主人名字的时候调用的静态方法
public static Cat getCatwithNameHost(String name,String host){

return new Cat(name,"",host);
}

//知道颜色和主人名字的时候调用的静态方法
public static Cat getCatwithColorHost(String color,String host){

return new Cat("",color,host);
}


}

使用静态工厂方法时,可以在知道的信息不完整的情况下,找到适合的构造方法.

回复列表 (共3个回复)

沙发

楼主说的好像和STATIC无关,去掉了也一样可以啊

板凳

好像偶错了,看错了

3 楼

去掉了static,就必须实例化类才能用。关键是这样用的实际意义好像不是很大吧?这样用了是不是看起来显得更乱了呢?愿闻高见~

我来回复

您尚未登录,请登录后再回复。点此登录或注册