【重构与模式】6.3 用Factory封装类

  当直接实例化处在同一包结构中、实现统一接口的多个类。能够把类的构造函数声明为非公共的,并经过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将一组客户并不需关心的子类屏蔽到包内部。
  若是类共享一个通用的公共接口、共享相同的超类、而且处在同一包结构中,该重构可能有用。
优缺点:
  + 经过意图导向的Creation Method简化了不一样种类实例的建立
  + 经过隐藏不须要公开的类减小了包的“概念重量”
  + 帮助严格执行“面向接口编程,而不是面向实现”这一格言
  - 当须要建立新种类的实例时,必须更新Creation Method

  - 当客户只能得到Factory的二进制代码而没法得到源码时,对Factory的定制将受到限制 spa

相关文章
相关标签/搜索