抽象工厂
在工厂方法模式中具体的工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个方法。但是有时候我们需要一个工厂可以提供多个产品的对象,而不是一个单一的产品对象。
为了更好的理解抽象工厂,我引入另外一个实例:
在这里有个设备工厂(抽象的)他生产两种设备,分别是电视机和空调,但是涉及到品牌的区别,所以有两个具体的设备工厂,分别是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());
}
}
}
所以说当通过工厂想得到的对象不仅仅是单个的前提下,可以考虑使用抽象工厂。