是对工厂的抽象化,而不是制造方法
设计思路
-
定义产品,将产品共有的属性进行统一抽象类封装
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Unit.java * @Description 兵种抽象类 * @createTime 2022年04月21日 09:37:00 */ public abstract class Unit { /** * 攻击类 */ protected int attack; /** * 防御力 */ protected int defence; /** * 生命力 */ protected int health; /** * 横坐标 */ protected int x; /** * 纵坐标 */ protected int y; public Unit(int attack, int defence, int health, int x, int y) { this.attack = attack; this.defence = defence; this.health = health; this.x = x; this.y = y; } /** * 绘制在图上 */ public abstract void show(); /** * 攻击 */ public abstract void attack(); }
-
将每个产品系列定义为抽象类并继承共有抽象父类,并初始化其基本属性
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName LowClassUnit.java * @Description 初级兵种类 * @createTime 2022年04月21日 09:58:00 */ public abstract class LowClassUnit extends Unit{ public LowClassUnit(int x, int y) { super(5, 2, 35, x, y); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName MidClassUnit.java * @Description 中级兵种类 * @createTime 2022年04月21日 09:59:00 */ public abstract class MidClassUnit extends Unit{ public MidClassUnit(int x, int y) { super(10, 8, 80, x, y); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName HighClassUnit.java * @Description 高级兵种 * @createTime 2022年04月21日 10:00:00 */ public abstract class HighClassUnit extends Unit{ public HighClassUnit(int x, int y) { super(25, 30, 300, x, y); } }
-
定义好具体产品实体类,继承抽象产品
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Marine.java * @Description 士兵 * @createTime 2022年04月21日 10:02:00 */ public class Marine extends LowClassUnit{ public Marine(int x, int y) { super(x, y); } @Override public void show() { System.out.println("士兵出现在坐标: [" + x + "," + y + "]"); } @Override public void attack() { System.out.println("攻击伤害:" + attack); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Tank.java * @Description 坦克 * @createTime 2022年04月21日 10:05:00 */ public class Tank extends MidClassUnit{ public Tank(int x, int y) { super(x, y); } @Override public void show() { System.out.println("坦克出现在坐标: [" + x + "," + y + "]"); } @Override public void attack() { System.out.println("攻击伤害:" + attack); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Battleship.java * @Description 巨型战舰 * @createTime 2022年04月21日 10:06:00 */ public class Battleship extends HighClassUnit{ public Battleship(int x, int y) { super(x, y); } @Override public void show() { System.out.println("巨型战舰出现在坐标: [" + x + "," + y + "]"); } @Override public void attack() { System.out.println("攻击伤害:" + attack); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Roach.java * @Description 螳螂类 * @createTime 2022年04月21日 10:11:00 */ public class Roach extends LowClassUnit{ public Roach(int x, int y) { super(x, y); } @Override public void show() { System.out.println("出现坐标: [" + x + "," + y + "]"); } @Override public void attack() { System.out.println("攻击伤害:" + attack); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Poison.java * @Description 毒液类 * @createTime 2022年04月21日 10:13:00 */ public class Poison extends MidClassUnit{ public Poison(int x, int y) { super(x, y); } @Override public void show() { System.out.println("出现坐标: [" + x + "," + y + "]"); } @Override public void attack() { System.out.println("攻击伤害:" + attack); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName Mammoth.java * @Description 猛犸类 * @createTime 2022年04月21日 10:30:00 */ public class Mammoth extends HighClassUnit{ public Mammoth(int x, int y) { super(x, y); } @Override public void show() { System.out.println("出现坐标: [" + x + "," + y + "]"); } @Override public void attack() { System.out.println("攻击伤害:" + attack); } }
-
抽象化工厂接口(可以是接口也可以是抽象类),规范各个产品系列的制造标准,并不关心返回的具体产品。
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName AbstractFactory.java * @Description 抽象兵工厂 * @createTime 2022年04月21日 10:48:00 */ public interface AbstractFactory { /** * 初级兵种制造标准 * * @return */ LowClassUnit createLowClass(); /** * 中级兵种制造标准 * * @return */ MidClassUnit createMidClass(); /** * 高级兵种制造标准 * @return */ HighClassUnit createHighClass(); }
-
继承抽象工厂的各个产品系列工厂
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName HumanFactory.java * @Description 人类兵工厂 * @createTime 2022年04月21日 11:00:00 */ public class HumanFactory implements AbstractFactory{ /** * 工厂横坐标 */ private int x; /** * 工厂纵坐标 */ private int y; public HumanFactory(int x, int y) { this.x = x; this.y = y; } @Override public LowClassUnit createLowClass() { System.out.println("制造初级兵种成功!"); return new Marine(x, y); } @Override public MidClassUnit createMidClass() { System.out.println("制造中级兵种成功!"); return new Tank(x, y); } @Override public HighClassUnit createHighClass() { System.out.println("制造高级兵种成功!"); return new Battleship(x, y); } }
package abstractFactory; /** * @author huangdq * @version 1.0.0 * @ClassName AlienFactory.java * @Description 外星母巢 * @createTime 2022年04月21日 13:49:00 */ public class AlienFactory implements AbstractFactory{ /** * 工厂横坐标 */ private int x; /** * 工厂纵坐标 */ private int y; public AlienFactory(int x, int y) { this.x = x; this.y = y; } @Override public LowClassUnit createLowClass() { System.out.println("制造外星初级兵种!"); return new Roach(x, y); } @Override public MidClassUnit createMidClass() { System.out.println("制造外星中级兵种!"); return new Poison(x, y); } @Override public HighClassUnit createHighClass() { System.out.println("制造外星高级兵种!"); return new Mammoth(x, y); } }