Tha*_*ham 22 java design-patterns factory effective-java
我正在阅读Effective Java
Joshua Bloch,我对Item1有疑问Static Factory Method
.
引用[布洛赫,第7页]
接口不能使用静态方法,因此按照惯例,名为Type的接口的静态工厂方法放在名为Types的不可实例化的类中.例如,Java Collections Framework提供不可修改的集合,同步集合等.几乎所有这些实现都是通过一个不可实例化的类(java.util.Collections)中的静态工厂方法导出的.返回对象的类都是非公共的.
好.查看源代码时,我看到带有私有构造函数的java.util.Collection
接口和java.util.Collections
类(不可实例化的类).而且我看到不可实例化的类Collections具有所有静态方法,就像Bloch所说的那样.但布洛赫说,我没有看到两个班级之间的联系
接口不能使用静态方法,因此按照惯例,名为Type的接口的静态工厂方法放在名为Types的不可实例化的类中.
任何人都可以向我指出明显的事吗?
什么是他说的意思
返回对象的类都是非公共的
这是我获取java源代码的地方:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collection.java?av = f
fas*_*seg 26
接口不能使用静态方法,因此按照惯例,名为Type的接口的静态工厂方法放在名为Types的不可实例化的类中.
关键是"Type [s]"上的复数"s".因此,如果您的接口被调用Foo
并且您想要创建一些实现,MyFoo
那么您的工厂应该Foos
按惯例调用实例化方法.
返回对象的类都是非公共的
这意味着从工厂方法返回的对象类具有私有或默认可见性修饰符,private class MyFoo{}
因此除了工厂方法之外,它们不能通过任何其他方式实例化.因为你不能使用new
私有内部或包私有类的运算符来构造一个Object,而不是它们的范围(反射旁边).
例如:
public interface Foo{ //interface without plural 's' (question 1)
public void bar();
}
public abstract class Foos(){ // abstract factory with plural 's' (question 1)
public static Foo createFoo(){
return new MyFoo();
}
private class MyFoo implements Foo{ // a non visible implementation (question 2)
public void bar(){}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11846 次 |
最近记录: |