实现抽象工厂模式,生成系列产品。
每一种物品都必须实现各自基类或者实现各自的接口(共性)
工厂类也必须有抽象的基类,感觉这里是接口比较好,好像j2ee中的访问数据库那样,实现在用jdbc和用hibernate中切换,只要把子类的生产工厂换掉,就可以实现jdbc和hibernate的切换。
----------- 物品类 -----------------
public abstract class Vehicle
{
run();//这个抽象类表示为汽车的抽象类。
}
/*
public interface Runnable
{
run();//这个接口表示为可以跑的东西,可以是车辆,也可以是人或其他。
}
*/
public abstract class Weapon
{
attack();
}
public class Car extends Vehicle
{
run();
}
public class Horse extends Vehicle
{
run();
}
public class Gun extends Weapon
{
attack();
}
public class Swordextends Weapon
{
attack();
}
---------------------------------
-----------工厂类----------------
public inteface IFactory
{
Vehicle createVehicle();
Weapon createWeapon();
}
---------生产现代产品的现代工厂类--------
public class ContemporaryFactory
{
Vehicle createVehicle()
{
return new Car();
}
Weapon createWeapon()
{
return new Gun();
}
}
---------生产古代产品的古代工厂类--------
public class AncientFactory
{
Vehicle createVehicle()
{
return new Horse();
}
Weapon createWeapon()
{
return new Sword();
}
}
不过感觉如果系列很多的话,那么工厂子类也要很多,不如这样
public class SingleFactory
{
public Vehicle createVehicle(int index, Object params[])//params是作为里面对象实例化的参数
{
switch(index)
{
case 0:return new Car();break;
case 1:return new Horse();break;
}
}
public Weapon createWeapon(int index, Object params[])
{
switch(index)
{
case 0:return new Gun();break;
case 1:return new Sword();break;
}
}
}
-------------------工厂类----------------------
public inteface VehicleFactory
{
Vehicle createVehicle();
}
public CarFactory implements VehicleFactory
{
Vehicle createVehicle()
{
return new Car();
}
}
//工厂类和抽象工厂类相比,缺点就是生成系列产品的时候不好切换,改动很多。优点是增加物品容易,只需要增加物品基类、物品子类和生产这个物品的工厂类就可以了。而抽象工厂不仅要增加物品子类,还要在每个系列工厂类中增加相应的方法。(不过这个优点具体还没有想清楚)。