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

  当一个层次中的类都相似的实现一个方法,只是对象创建的步骤不同时,可以创建调用Factory Method来处理实例化方法的唯一超类版本

(把子类的类似方法改成相同的然后提取到超类里面)

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("开车打酱油去");
	}
}

重构后:

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();
	}

动机:

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

你可能感兴趣的:(【重构与模式】6.4 用Factory Method引入多态创建)