美文网首页
抽象工厂模式

抽象工厂模式

作者: 瑾墨QAQ | 来源:发表于2019-01-16 02:04 被阅读0次

抽象工厂模式实例解析:

通过对于游戏英雄的初始化来说,使用抽象工厂模式,可以在增加英雄类别的时候不用去关心其内部的运作,如在有魔法师的前提下,添加骑士的时候,只需要在HeroFactory英雄工厂内创建新的判断语句来判断需要创建的英雄是骑士,通过工厂创建新的英雄。

package 工厂模式.抽象工厂模式.抽象工厂.例3;

/**
 * 对于英雄的接口
 *
 * @author jinmo
 *
 * */
public interface Hero {
    /**类别*/
    public String name();
    /**血量*/
    public int blood();
    /**武器*/
    public String weapon();
    /**技能*/
    public String skill();
}

package 工厂模式.抽象工厂模式.抽象工厂.例3;

public class HeroFactory extends Factory{
    @Override
    public Hero getHero(String hero) {
        if (hero==null){
            return null;
        }
        else if(hero.equals("Magician")){
            return new Magician();
        }
        else if(hero.equals("Knight")){
            return new Knight();
        }
        return null;
    }
}

package 工厂模式.抽象工厂模式.抽象工厂.例3;

public abstract class Factory {
    public abstract Hero getHero(String hero);
}

package 工厂模式.抽象工厂模式.抽象工厂.例3;

/**
 * 对象工厂,用于接口对象的生成
 * 超级工厂
 * @author 瑾墨
 * */
public class FactoryProducer {
    public static Factory getFactory(String choice){
      if (choice==null){
          System.out.println("没有对应的");
          return null;
      }
      else if(choice=="Hero"){
          return new HeroFactory();
      }
        return null;
    }
}

package 工厂模式.抽象工厂模式.抽象工厂.例3;

public class Knight implements Hero {
    @Override
    public String name() {
        String name="骑士";
        return name;
    }

    @Override
    public int blood() {
        int blood=1;
        return blood;
    }

    @Override
    public String weapon() {
        String weapon="大剑";
        return weapon;
    }

    @Override
    public String skill() {
        String skill="烈阳斩";
        return skill;
    }
}
package 工厂模式.抽象工厂模式.抽象工厂.例3;
/**
 * 定义游戏对象为 魔法师
 * 其拥有英雄接口的 血量 技能 武器
 * @author 瑾墨
 *
 * */
public class Magician implements Hero {
    @Override
    public String name() {
        String name="魔法师";
        return name;
    }

    @Override
    public int blood() {
        /*魔法师有一条命*/
        int Blood=2;
        return Blood;
    }

    @Override
    public String weapon() {
        String weapon="魔法杖";
        return weapon;
    }

    @Override
    public String skill() {
        String skill="时间静止";
        return skill;
    }

}
package 工厂模式.抽象工厂模式.抽象工厂.例3;

public class GameStar {
    public static void main(String[] args) {
        Factory heroFactory=FactoryProducer.getFactory("Hero");
        /**魔法师*/
        Hero magician=heroFactory.getHero("Magician");
        String name=magician.name();
        int blood=magician.blood();
        String weapon=magician.weapon();
        String skill=magician.skill();
        System.out.println("姓名:"+name+"\n血量:"+blood+"\n武器:"+weapon+"\n技能:"+skill);
        System.out.println();

        /**骑士*/
        Hero knight=heroFactory.getHero("Knight");
        String name1=knight.name();
        int blood1=knight.blood();
        String weapon1=knight.weapon();
        String skill1=knight.skill();
        System.out.println("姓名:"+name1+"\n血量:"+blood1+"\n武器:"+weapon1+"\n技能:"+skill1);
        System.out.println();
    }
}

相关文章

网友评论

      本文标题:抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/cnrudqtx.html