美文网首页
抽象工厂模式

抽象工厂模式

作者: 瑾墨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