在工厂方法模式中:核心的工厂类不在负责所有的产品的创建,而是将具体创建的工作交给子类去做,这个核心类就成为一个抽象工厂角色,仅负责给具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
在这里举一个例子: 抽象产兵器;具体产品有大炮,坦克和轰炸机。使用工厂方法模式生产具体产品 。用代码实现。模拟代码如下:
Weapons.java
public interface Weapons {
/** 抽象工厂方法 */
public abstract ManuFacture battle();
}
ManuFacture.java
public interface ManuFacture {
/** 组装 */
public abstract void assembling();
/** 拆除 */
public abstract void dismantle();
}
ManuFactureAircraft.java
public class ManuFactureAircraft implements ManuFacture {
@Override
public void assembling() {
// TODO Auto-generated method stub
System.out.println("组装轰炸机");
}
@Override
public void dismantle() {
// TODO Auto-generated method stub
System.out.println("拆除轰炸机");
}
}
ManuFactureArtillery.java
public class ManuFactureArtillery implements ManuFacture {
@Override
public void assembling() {
// TODO Auto-generated method stub
System.out.println("组装大炮");
}
@Override
public void dismantle() {
// TODO Auto-generated method stub
System.out.println("拆除大炮");
}
}
ManuFactureTank.java
public class ManuFactureTank implements ManuFacture {
@Override
public void assembling() {
// TODO Auto-generated method stub
System.out.println("组装坦克");
}
@Override
public void dismantle() {
// TODO Auto-generated method stub
System.out.println("拆除坦克");
}
}
Aircraft.java
public class Aircraft implements Weapons {
/** 实现轰炸机战斗的工厂方法 */
@Override
public ManuFacture battle() {
// TODO Auto-generated method stub
return new ManuFactureAircraft();
}
}
Artillery.java
public class Artillery implements Weapons {
/** 实现大炮战斗的工厂方法 */
@Override
public ManuFacture battle() {
// TODO Auto-generated method stub
return new ManuFactureArtillery();
}
}
Tank.java
public class Tank implements Weapons {
/**实现坦克战斗的工厂方法 */
@Override
public ManuFacture battle() {
// TODO Auto-generated method stub
return new ManuFactureTank();
}
}
测试程序:
Client.java
public class Client {
private static Weapons weapons1, weapons2,weapons3;
private static ManuFacture mf1, mf2,mf3;
public static void main(String[] args) {
// TODO Auto-generated method stub
weapons1=new Artillery();
mf1=weapons1.battle();
mf1.assembling();
mf1.dismantle();
weapons2=new Tank();
mf2=weapons2.battle();
mf2.assembling();
mf2.dismantle();
weapons3=new Aircraft();
mf3=weapons3.battle();
mf3.assembling();
mf3.dismantle();
}
}