当直接实例化处在同一包结构中、实现统一接口的多个类。能够把类的构造函数声明为非公共的,并经过Factory来建立它们的实例 java
(针对多个类:把多个类的构造方法先creation method,以后提取到工厂类中) 编程
public abstract class AttributeDescriptor { protected AttributeDescriptor() { } public void sayHello() { } } public class IntegerDescriptor extends AttributeDescriptor { public IntegerDescriptor() { super(); } public void sayHello() { System.out.println("I am integer method"); } } public class BooleanDescriptor extends AttributeDescriptor { public BooleanDescriptor() { super(); } public void sayHello() { System.out.println("I am boolean method"); } } public class ReferenceDescriptor extends AttributeDescriptor { public ReferenceDescriptor() { super(); } public void sayHello() { System.out.println("I am reference method"); } }
重构以后: 函数
public abstract class AttributeDescriptor { protected AttributeDescriptor(){ } public void sayHello(){ } public AttributeDescriptor forInteger(){ return new IntegerDescriptor(); } public AttributeDescriptor forBoolean(){ return new BooleanDescriptor(); } public AttributeDescriptor forReference(){ return new ReferenceDescriptor(); } } public class IntegerDescriptor extends AttributeDescriptor{ public void sayHello(){ System.out.println("I am integer method"); } } public class BooleanDescriptor extends AttributeDescriptor{ public void sayHello(){ System.out.println("I am boolean method"); } } public class ReferenceDescriptor extends AttributeDescriptor{ public void sayHello(){ System.out.println("I am reference method"); } }
AttributeDescriptor a = AttributeDescriptor.forInteger(); a.sayHello();
- 当客户只能得到Factory的二进制代码而没法得到源码时,对Factory的定制将受到限制 spa