在工厂方法模式中具体的工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个方法。但是有时候我们需要一个工厂可以提供多个产品的对象,而不是一个单一的产品对象。
?
?
为了更好的理解抽象工厂,我引入另外一个实例:
在这里有个设备工厂(抽象的)他生产两种设备,分别是电视机和空调,但是涉及到品牌的区别,所以有两个具体的设备工厂,分别是Haier和TCL,他们都能生产自己家品牌的电视机和空调。
?
Code:
设备工厂以及具体设备工厂
public interface EFactory { public Television produceTelevision(); public AirConditioner produceAirConditioner(); } public class TCLFactory implements EFactory { public Television produceTelevision() { return new TCLTelevision(); } public AirConditioner produceAirConditioner() { return new TCLAirConditioner(); } } public class HaierFactory implements EFactory { public Television produceTelevision() { return new HaierTelevision(); } public AirConditioner produceAirConditioner() { return new HairAirConditioner(); } }
?
电视产品
public interface Television { public void play(); } public class TCLTelevision implements Television { public void play() { System.out.println("TCL Playing....."); } } public class HaierTelevision implements Television { public void play() { System.out.println("Haier Playing......"); } }
?
空调产品
public interface AirConditioner { public void changeTemperature(); } public class HairAirConditioner implements AirConditioner { public void changeTemperature() { System.out.println("Haier Change Temperature....."); } } public class TCLAirConditioner implements AirConditioner { public void changeTemperature() { System.out.println("TCL Change Temperature....."); } }
?
Cilent
public class Client { public static void main(String args[]) { try { EFactory factory; Television tv; AirConditioner ac; factory= new HaierFactory(); tv=factory.produceTelevision(); tv.play(); ac=factory.produceAirConditioner(); ac.changeTemperature(); } catch(Exception e) { System.out.println(e.getMessage()); } } }
?
所以说当通过工厂想得到的对象不仅仅是单个的前提下,可以考虑使用抽象工厂。
原文:http://gagapear.iteye.com/blog/2165593