小探设计模式(二)
星期一, 9月 29th, 2008 9:23 下午工厂方法
工厂方法把构造产品对象的任务交给子类处理。还是以War3作例。
- //IWarFactory.java 工厂父类
- package warunit;
- public interface IWarFactory {
- public IWarUnit train(String type);
- }
- //AncientOfWar.java 战争古树
- package warunit;
- public class AncientOfWar implements IWarFactory {
- public IWarUnit train(String type){
- if(type.equalsIgnoreCase("Archer")){
- return new Archer();
- }
- if(type.equalsIgnoreCase("Huntress")){
- return new Huntress();
- }
- return null;
- }
- }
- //AncientOfWind.java 风之古树
- package warunit;
- public class AncientOfWind implements IWarFactory {
- public AncientOfWind(){
- }
- public IWarUnit train(String type){
- if(type.equalsIgnoreCase("hippogryph")){
- return new Hippogryph();
- }
- return null;
- }
- }
- //IWarUnit.java 战争单位(兵)父类
- package warunit;
- public interface IWarUnit {
- abstract public void born();
- abstract public void death();
- }
- //Archer.java AC MM
- package warunit;
- public class Archer implements IWarUnit {
- public Archer(){
- this.born();
- }
- public void born(){
- System.out.print("an Archer had been trained\n");
- }
- public void death(){
- System.out.print("an Archer had been killed\n");
- }
- }
- //Hippogryph 角鹰
- package warunit;
- public class Hippogryph implements IWarUnit {
- public Hippogryph(){
- this.born();
- }
- public void born(){
- System.out.print("A Hippogryph was born");
- }
- public void death(){
- System.out.print("A Hippogryph had been killed");
- }
- }
- //程序入口
- import warunit.*;
- public class Main {
- public static void main(String[] args){
- AncientOfWar Br=new AncientOfWar();
- IWarUnit Ac1=Br.train("Archer");
- AncientOfWind Bw=new AncientOfWind();
- IWarUnit hp=Bw.train("hippogryph");
- Ac1.death();
- hp.death();
- }
- }
