抽象工厂模式实例解析:
通过对于游戏英雄的初始化来说,使用抽象工厂模式,可以在增加英雄类别的时候不用去关心其内部的运作,如在有魔法师的前提下,添加骑士的时候,只需要在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();
}
}
网友评论