在工厂方法模式中:核心的工厂类不在负责所有的产品的创建,而是将具体创建的工作交给子类去做,这个核心类就成为一个抽象工厂角色,仅负责给具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
在这里举一个例子: 抽象产兵器;具体产品有大炮,坦克和轰炸机。使用工厂方法模式生产具体产品 。用代码实现。模拟代码如下:
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(); } }