抽象工厂方法是工厂方法的泛化版,工厂方法是一种特殊的抽象工厂方法。抽象工厂方法中,一个具体的工厂可以生产多个具体的产品。
抽象工厂方法同样包含四个角色:抽象工厂,具体工厂,抽象产品,具体产品。
//抽象产品
public interface Television {
public void play();
}
//具体产品
public class HaierTelevision implements Television{
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("海尔电视机播放中");
}
}
public class TCLTelevision implements Television {
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("TCL电视播放中");
}
}
//抽象产品
public interface AirCondition {
public void changeTemperature();
}
//具体产品
public class HaierCondition implements AirCondition {
@Override
public void changeTemperature() {
// TODO Auto-generated method stub
System.out.println("海尔空调改变温度中");
}
}
public class TCLAirCondition implements AirCondition {
@Override
public void changeTemperature() {
// TODO Auto-generated method stub
System.out.println("TCL空调改变温度中");
}
}
//抽象工厂
public interface EFactory {
public Television produceTelevision();
public AirCondition produceAirCondition();
}
//具体工厂
public class HaierFactory implements EFactory {
@Override
public Television produceTelevision() {
// TODO Auto-generated method stub
return new HaierTelevision();
}
@Override
public AirCondition produceAirCondition() {
// TODO Auto-generated method stub
return new HaierCondition();
}
}
public class TCLFactory implements EFactory {
@Override
public Television produceTelevision() {
// TODO Auto-generated method stub
return new TCLTelevision();
}
@Override
public AirCondition produceAirCondition() {
// TODO Auto-generated method stub
return new TCLAirCondition();
}
}
抽象工厂模式的优点:
(1)当一个产品族中多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象,这对需要根据当前环境来决定其行为的软件系统来说很实用。
(2)工厂方法的优点,它都有。
抽象工厂模式的缺点:
(1)抽象工厂无法被扩展。