一、举一个手机的例子
生产品:手机
生产两个品牌:苹果手机和安卓手机
每个品牌生产两种:高端机和低端机
分析:苹果手机和安卓手机的共性就是,都有高端机和低端机,那么干脆就建一个工厂(PhoneFactory)准备两条生产线,一个生产高端机(createHigh方法),另一个生产低端机(createLow方法);如果苹果有订单,那么工厂就改为苹果工厂(AndroidFactory ),生产苹果手机,同理安卓有订单,工厂就改为安卓工厂(AndroidFactory ),生产android手机即可。
二、代码实例
//手机工厂接口
public interface PhoneFactory{
public HighPhone createHigh();
public LowPhone createLow();
}
//高端机接口
public interface HighPhone{
public void show();
}
//低端机接口
public interface LowPhone{
public void show();
}
//安卓高端机类
public class AndroidHigh implements HighPhone{
public void show(){
System.out.printf("andoridHigh");
}
}
//安卓低端机类
public class AndroidLow implements LowPhone{
public void show(){
System.out.printf("andoridLow");
}
}
//苹果高端机类
public class AppleHigh implements HighPhone{
public void show(){
System.out.printf("andoridHigh");
}
}
//安卓低端机类
public class AppleLow implements LowPhone{
public void show(){
System.out.printf("andoridLow");
}
}
//安卓工厂类
public class AndroidFactory implements PhoneFactory{
public HighPhone createHigh(){
return new AndroidHigh();
};
public LowPhone createLow(){
return new LowHigh();
};
}
//苹果工厂类
public class AppleFactory implements PhoneFactory{
public HighPhone createHigh(){
return new AppleHigh();
};
public LowPhone createLow(){
return new AppleLow();
};
}
三、优点和缺点
优点:细节实现和上层抽象分离
缺点:产生很多类或接口
四、提示
以上描述的手机的场景,如果用图来表示手机、品牌、配置之间的关系,就绘出一张图,这张图的特点是,手机就是根 结点,而配置是最终叶子结点;结合这张图,然后在对照一下代码,你就会发现适用抽象工厂模式场景的蛛丝马迹。