實現抽象工廠模式,生成系列產品。
每一種物品都必須實現各自基類或者實現各自的接口(共性)
工廠類也必須有抽象的基類,感覺這裏是接口比較好,好像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();
}
}
//工廠類和抽象工廠類相比,缺點就是生成系列產品的時候不好切換,改動很多。優點是增加物品容易,只需要增加物品基類、物品子類和生產這個物品的工廠類就可以了。而抽象工廠不僅要增加物品子類,還要在每個系列工廠類中增加相應的方法。(不過這個優點具體還沒有想清楚)。