設計模式(九)[建立模式] 工廠方法模式(Factory Method)

工廠方法模式是簡單工廠模式進一步抽象和推廣。在工廠方法模式中,核心的工廠類再也不負責全部的產品的建立,而是將具體建立的工做交給子類去作。這個核心類則搖身一變,成爲抽象工廠的角色,僅負責給具體工廠子類必須實現的接口,而不接觸哪個產品類應當被實例化這種細節。java

1.工廠方法模式的結構ide

結構與角色code

  • 抽象工廠(Creator)角色:擔任這個角色的是工廠方法模式的核心,它是與應用程序無關的。任何在模式中建立對象的工廠類必須實現這個接口。在上面的系統中,這個角色由Java接口Creator扮演:在實際的系統中,這個角色也經常使用抽象Java類實現。
  • 具體工廠(Concrete Creator)角色:擔任這個角色的是實現了抽象工廠接口的具體Java類。具體工廠角色含有與應用密切相關的邏輯,而且受到應用程序的調用以建立產品對象。在本系統中給出了兩個這樣的角色,ConcreteCreator1和ConcreteCreator2。
  • 抽象產品(Product)角色:工廠方法模式所建立的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。在本系統由Java接口Product扮演。
  • 具體產品(Concrete Product)角色:這個角色實現了抽象產品角色所聲明的接口。
package com.test;

public interface Creator {

	/**
	 * 工廠方法
	 * @return
	 */
	public Product factory();
}
package com.test;

public interface Product {

}
package com.test;

public class ConcreteCreator1 implements Creator {

	/**
	 * 工廠方法
	 */
	@Override
	public Product factory() {
		
		return new ConcreteProduct1();
	}

}
package com.test;

public class ConcreteProduct1 implements Product {

	public ConcreteProduct1() {
		super();
	}
	
}
package com.test;

public class ConcreteProduct2 implements Product {

	public ConcreteProduct2() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}
package com.test;

public class ConcreteCreator2 implements Creator {
	/**
	 * 工廠方法
	 */
	@Override
	public Product factory() {
		return new ConcreteProduct2();
	}

}
package com.test;

public class Client {

	private static Creator creator1,creator2;
	private static Product prod1,prod2;
	public static void main(String[] args) {
		
		creator1 = new ConcreteCreator1();
		prod1 = creator1.factory();
		creator2 = new ConcreteCreator2();
		prod2 = creator2.factory();
	}
}
相關文章
相關標籤/搜索