静态工厂方法(Static factory method)的优点:
1.静态工厂方法有名称
在需要多个构造函数且构造函数的参数类型完全一样时,可以使用静态工厂方法。而且可以选择静态工厂的名称以突出他们之间的区别
2.不必在每次调用他们的时候创建一个新的类
这使得使用静态工厂时,不会存在两个相等的实例,及当且仅当a==b是a.equals(b)为true
3.可以返回原返回类型的任意子类型
1 public interface RandomGenerator<T> { 2 T next(); 3 }
RandomIntGenerator 的第一个实现类如下:String类型的生成器如:01 class RandomIntGenerator implements RandomGenerator<Integer> { 02 private final int min; 03 private final int max; 04 05 RandomIntGenerator(int min, int max) { 06 this.min = min; 07 this.max = max; 08 } 09 10 public Integer next() {...} 11 }1 class RandomStringGenerator implements RandomGenerator<String> { 2 private final String prefix; 3 4 RandomStringGenerator(String prefix) { 5 this.prefix = prefix; 6 } 7 8 public String next() {...} 9 }
01 public final class RandomGenerators { 02 // Suppresses default constructor, ensuring non-instantiability. 03 private RandomGenerators() {} 04 05 public static final RandomGenerator<Integer> getIntGenerator() { 06 return new RandomIntGenerator(Integer.MIN_VALUE, Integer.MAX_VALUE); 07 } 08 09 public static final RandomGenerator<String> getStringGenerator() { 10 return new RandomStringGenerator(''); 11 } 12 }
假设编写了一个新的获取随机数的类,那么只要让这个类实现RandomGenerators,然后在getIntGenerator方法中修改返回值就可以了
4.在创建参数化实例的时候,使代码更简洁
静态工厂方法的缺点:
1.类如果不含有public或者protected的构造方法,就不能被子类化
不理解
2.静态工厂方法与其他静态方法没有区别
在文档中没有那么容易认出静态工厂方法
本文探讨了静态工厂方法的优点,包括方法命名明确、避免重复实例创建、返回子类型灵活及代码简洁;同时也指出了其不足之处,如限制了类的继承能力及方法标识不明显等问题。

1092

被折叠的 条评论
为什么被折叠?



