设计模式(抽象工厂)

是对工厂的抽象化,而不是制造方法

设计思路

  • 定义产品,将产品共有的属性进行统一抽象类封装

      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);
          }
      }
    
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值