抽象工厂模式是在工厂模式之上又细化了一点,
记得模式工厂中我是定义car接口然后实现car接口的方法:
这里我将car细分为SuvCar和MiniCar;
接着我便一步一步给自己回顾:
定义SuvCar和MiniCar接口:
/**
*
- @author dch
*/
//定义一个SuvCar的接口
public interface SuvCar {
//定义一个抽象方法
public void showInfoSuvCar();
}
/**
*
- @author dch
*/
//定义一个MiniCar的接口
public interface MiniCar {
//定义一个抽象方法
public void showInfoMiniCar();
}
同样定义BMSuvCar,BMMiniCar和ADSuvCar,ADMiniCar四个类实现对应接口方法;
BMSuvCar:
/**
*
- @author dch
*/
//定义一个宝马SuvCar类来实现SuvCar接口
public class BMSuvCar implements SuvCar{
@Override
//宝马SuvCar类重写接口的方法
public void showInfoSuvCar() {
// TODO Auto-generated method stub
System.out.println("我是宝马suv汽车");
}
}
BMMiniCar:
/**
*
- @author dch
*/
//定义一个宝马MiniCar类来实现MiniCar接口
public class BMMiniCar implements MiniCar{
@Override
//宝马MiniCar类重写接口的方法
public void showInfoMiniCar() {
// TODO Auto-generated method stub
System.out.println("我们是宝马Mini汽车");
}
}
ADSuvCar:
/**
*
- @author dch
*/
//定义一个奥迪SuvCar类来实现SuvCar接口
public class ADSuvCar implements SuvCar{
@Override
//奥迪SuvCar类重写接口的方法
public void showInfoSuvCar() {
// TODO Auto-generated method stub
System.out.println("我是奥迪Suv汽车");
}
}
ADMiniCar:
/**
*
- @author dch
*/
//定义一个奥迪MiniCar类来实现接口的方法
public class ADMiniCar implements MiniCar{
@Override
//奥迪MiniCar类来重写接口的方法
public void showInfoMiniCar() {
// TODO Auto-generated method stub
System.out.println("我是奥迪Mini汽车");
}
}
接下来就是工厂来创建对应的对象来调用对应的方法:
定义一个汽车工厂CarFactory接口:
而这个接口里面则包含SuvCar和MiniCar两个接口名作为引用的数据类型;
/**
*
- @author dch
*/
//定义一个汽车工厂接口
public interface CarFactory {
//定义生产的方法
public MiniCar produceMiniCar();
public SuvCar produceSuvCar();
}
同样的BMCarFactory宝马汽车工厂实现接口的两个方法:
/**
*
- @author dch
*/
//定义一个宝马汽车工厂来实现汽车工厂的接口方法
public class BMCarFactory implements CarFactory{
@Override
public MiniCar produceMiniCar() {
// TODO Auto-generated method stub
return new BMMiniCar();
}
@Override
public SuvCar produceSuvCar() {
// TODO Auto-generated method stub
return new BMSuvCar();
}
}
同样的ADCarFactory宝马汽车工厂实现接口的两个方法:
/**
*
- @author dch
*/
//定义奥迪汽车工厂来实现汽车工厂的接口
public class ADCarFactory implements CarFactory{
@Override
public MiniCar produceMiniCar() {
// TODO Auto-generated method stub
return new ADMiniCar();
}
@Override
public SuvCar produceSuvCar() {
// TODO Auto-generated method stub
return new ADSuvCar();
}
}
测试类:
/**
*
- @author dch
*/
//测试类
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
CarFactory factory = new BMCarFactory();
SuvCar suvCar = factory.produceSuvCar();
MiniCar miniCar = factory.produceMiniCar();
suvCar.showInfoSuvCar();
miniCar.showInfoMiniCar();
CarFactory factory2 = new ADCarFactory();
MiniCar miniCar2 = factory2.produceMiniCar();
SuvCar suvCar2 = factory2.produceSuvCar();
miniCar2.showInfoMiniCar();
suvCar2.showInfoSuvCar();
}
}
抽象工厂模式:
是在工厂模式上将car细分成SuvCar和MiniCar两种不同类型的汽车,
从而达到让汽车更加详细,而不是统一的叫汽车
当然我自己要明白的是,当我们企图增加时,自己要明白我只能加不同品牌的这两种类型的汽车,
而不是又增加了另外一种类型汽车,例如越野型汽车,这是做不到的,
我只能增加例如大众SuvCar和大众MiniCar,
这说明类型不能变,其他的我自己就不用在解释.
简单工厂和工厂方法、抽象工厂的区别和用途
1、简单工厂,对用不同产品的批量创建 , 优点: 创建对象时配置信息高度统一,缺点:扩展产品时需要修改工厂。
2、工厂方法:在简单工厂的基础上可以任意扩展不同的产品 , 优点: 可扩展性好 ,缺点: 对于不同品牌,相同型号的扩展依然需要修改工厂
3、抽象工厂: 在工厂方法的基础上,可扩展相同型号,不同品牌的产品 ,前提是工厂的型号一样