在工厂模式(二)中提到的问题:怎样实现多产品系?
- 抽象工厂模式的实现
- 工厂模式与抽象工厂模式的区别
抽象工厂模式的实现
实现步骤
1、定制抽象产品接口,如ICar,IBus
2、定制其具体子类,如小汽车类TopCar、MidCar、LowCar,公共汽车类TopBus、MidBus、LowBus
3、定制抽象工厂类(或接口),如AbstractFactory,其中有两个重要的create()抽象方法,一个返回ICar,一个返回IBus
4、定制具体工厂子类,如TopFacyory、MidFactory、LowFactory,每个工厂重写create()抽象方法
//定义小汽车接口:ICar.java
public interface ICar{
//由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
}
//下面定义高、中、低档具体的小汽车
//高档汽车:TopCar.java
public class TopCar implements ICar {
}
//中档汽车:MidCar.java
public class MidCar implements ICar {
}
//低档汽车:LowCar.java
public class LowCar implements ICar {
}
//定义公共汽车接口:IBus.java
public interface IBus{
//由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
}
//下面定义高、中、低档具体的公共汽车
//高档公共汽车:TopBus.java
public class TopBus implements IBus {
}
//中档公共汽车:MidBus.java
public class MidBus implements IBus {
}
//低档公共汽车:LowBus.java
public class LowBus implements IBus {
}
//定义抽象工厂AbstractFactory.java
public abstract class AbstractFactory{
public abstract ICar create();
public abstract IBus create();
}
//定义高档工厂
public class TopFactory extends AbstractFactory{
public ICar create (){
return new TopCar();
}
public IBus create (){
return new TopBus();
}
}
//定义中档工厂
public class MidFactory extends AbstractFactory{
public ICar create (){
return new MidCar();
}
public IBus create (){
return new MidBus();
}
}
//定义低档工厂
public class LowFactory extends AbstractFactory{
public ICar create (){
return new LowCar();
}
public IBus create (){
return new LowBus();
}
}
//测试程序:CarTest.java
public class CarTest {
public static void main(String[] args) {
AbstractFactory obj = new TopFactory();//多态创建高档工厂
ICar car = obj.create(); //获得高档工厂中的小汽车对象
IBus bus = obj.create(); //获得高档工厂中的公共汽车对象
}
}
工厂模式与抽象工厂模式的区别
从本质上来说,抽象工厂与工厂模式是统一的,只不过抽象工厂是多产品系的,工厂模式是单产品系的。