1.简介
抽象工厂模式:为创建一组相关或者相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式与工厂方法模式主要区别在于抽象可以支持多个产品族,而工厂方法模式只能支持单一产品。
2.结构
3.示例
//抽象产品(Benz)
public interface Benz{
public String drive();
}
//产品实例(WhiteBenz)
public class WhiteBenz implements Benz{
public String drive(){
return "drive WhiteBenz";
}
}
//产品实例(BlockBenz)
public class BlockBenz implements Benz{
public String drive(){
return "drive BlockBenz";
}
}
//抽象产品(BMW)
public interface BMW{
public String drive();
}
//产品实例(WhiteBMW)
public class WhiteBMW implements BMW{
public String drive(){
return "drive WhiteBMW";
}
}
//产品实例(BlackBMW)
public class BlackBMW implements BMW{
public String eat(){
return "drive BlackBMW";
}
}
//产品族抽象工厂
public interface CarFactory{
public Benz getBenz();
public BMW getBMW();
}
//产品族工厂(white)
public class WhiteFactory implements CarFactory{
public Benz getBenz(){
return new WhiteBenz();
}
public BMW getBMW(){
return new WhiteBMW();
}
}
//产品族工厂(black)
public class BlackFactory implements CarFactory{
public Benz getBenz(){
return new BlackBenz();
}
public BMW getBMW(){
return new BlackBMW();
}
}
public class Main{
public static void main(String[] args){
CarFactory wf = new WhiteFactory();
Benz wbenz = wf.getBenz();
BMW wbmw = wf.getBMW();
System.out.println(wbenz.drive());
System.out.println(wbmw.drive());
CarFactory bf = new BlackFactory();
Benz bbenz = bf.getBenz();
BMW bbmw = bf.getBMW();
System.out.println(bbenz.drive());
System.out.println(bbmw.drive());
}
}