Effective Java 研磨之一----关于静态工厂方法的缺点--讨论

挖粪涂墙 发布于 2013/08/01 10:06
阅读 1K+
收藏 1

            最近开始研读Effective Java,刚开始看到的就是关于使用静态工厂(不一定是涉及模式里面的静态工厂模式),里面提到了关于静态工厂的缺点:

静态工厂方法的主要缺点在于,类如果不含有公有的或受保护的构造器,就不能被子类化。
        英文版的原版的内容是:

The main disadvantage of providing only static factory methods is that classes without public or protected constructors cannot be subclassed.
        那么这里的”类“具体体现在真实的源代码环境中,根据我对上下文的理解,就应该是:
如果父类没有提供Public的或者Protected的构造方法,那么使用静态工厂方法,将无法根据父类去获取到子类的实例。
        比如以下的静态工厂模式中:

       假设我们的的factoryMethod的方法的内容分如下:

public static Product newInstance(){
     Product product = new ConcreteProduct(); 
     return product;
}
      假设Product没有提供任何public或者protected的构造方法,是不是静态方法里的语句就是错误的?

      请大家深入讨论,拒绝”我早就知道了“、”白痴问题“、”太简单了“之类的话语,你早就知道了,那么顺便

回答”public\private\protected\friendly“四个修饰符在编译级别的具体含义~很基础但是不简单!

加载中
0
h
hellojinjie

The main disadvantage of providing only static factory methods is that classes without public or protected constructors cannot be subclassed.

你确定你对上面的这句话的理解是正确的?特别是 subclassed。这句话的意思应该是说如果一个 class 没有pubic 或者 protected 的构造方法的话,就不能有其他的class 继承于它,这样导致该class 在可扩展性上不是很好。


还有你举得例子,其实,你可以看jdk 中的EnumSet,

挖粪涂墙
挖粪涂墙
我放在这里这么久了才有人过来看,这样子的,子类实例化,就像我在例子中说道的一样,英文的原来的意思恐怕不是你说的那个意思。
0
IncRediblE
IncRediblE

public class Test {


    private Test() {}


    public static Test getInstance() {
        return new Test();
    }
}



楼主你想表达什么,能说的清楚么?

那句话是说如果一个类使用了静态工厂方法,那么基本就是私有构造了,所以这个类如同1楼说的

挖粪涂墙
挖粪涂墙
根据上下文的意思,也不是这个意思
0
M
My-天-地
能够说详细点吗??
0
FireCool
FireCool
这个您现在理解了吗?
0
沉浮aim
沉浮aim
如果无参的话就没有错了吧,父类默认的构造就是public
返回顶部
顶部