Abstract static factory method [getInstance()] in Java?
当然,下面的Java不起作用(没有抽象的静态方法)…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public abstract class Animal { public abstract static Animal getInstance(byte[] b); } public class Dog extends Animal { @Override public static Dog getInstance(byte[] b) { // Woof. return new Dog(...); } } public class Cat extends Animal { @Override public static Cat getInstance(byte[] b) { // Meow. return new Cat(...); } } |
要求
无法在抽象类(或接口)中指定实现类必须具有特定静态方法。
使用反射可以获得类似的效果。
另一种选择是定义一个与
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public interface AnimalFactory { Animal getInstance(byte[] b); } public class DogFactory implements AnimalFactory { public Dog getInstance(byte[] b) { return new Dog(...); } } public interface Animal { // ... } class Dog implements Animal { // ... } |