【重构与模式】6.4 用Factory Method引入多态建立

  当一个层次中的类都类似的实现一个方法,只是对象建立的步骤不一样时,能够建立调用Factory Method来处理实例化方法的惟一超类版本 java

(把子类的相似方法改为相同的而后提取到超类里面) ide

public class Bike {
	private Bike bike;
	public void dajiangyou(){
		bike = new Bike();
		System.out.println("骑自行车打酱油去");
	}
}
public class Car {
	private Car car;
	public void dajiangyou(){
		car = new Car();
		System.out.println("开车打酱油去");
	}
}

重构后: spa

public class NewCar extends TransportFactory{
	
	public NewCar(){
		System.out.println("drive car");
	}
	@Override
	protected TransportFactory create() {
		return new NewCar();
	}
}
public class NewBike extends TransportFactory{
	public NewBike(){
		System.out.println("take bike");
	}
	@Override
	protected TransportFactory create() {
		return new NewBike();
	}
}
public abstract class TransportFactory {
	
	protected TransportFactory transport;
	protected abstract TransportFactory create();
	
	public void dajiangyou(){
		transport = create();
		System.out.println("打酱油去");
	}
}
public static void main(String[] args) {
		TransportFactory t = new NewCar();
		t.dajiangyou();
	}

动机: code

  Factory Method是OOP中最多见的模式,因其提供了多台建立对象的方法
  使用Factory Method后的代码每每比在类中赋值方法来建立自定义对象要简单
  使用Factory Method的主要状况:
    当兄弟子类实现了除对象建立步骤外都很类似的方法时
    当超类和子类实现了除对象建立步骤外都很类似的方法时
优缺点:
  + 减小因建立自定义对象而产生的重复代码
  + 有效的表达了对象建立发生的位置,以及如何重写对象的建立
  + 强制Factory Method使用的类必须实现统一的类型
  - 可能会向Factory Method的一些实现者传递没必要要的参数
相关文章
相关标签/搜索