抽象工厂模式:不同的模式,创建不同强度的英雄

一、模式介绍

  • 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
  • 设计原则
    依赖抽象,不要依赖具体类。
  • 相关组件
  1. Abstract Factory :抽象工厂,定义创建一系列产品对象的操作接口。
  2. Concrete Factory :具体的工厂,实现抽象工厂定义的方法,具体实现一系列产品对象的创建。
  3. Abstract Product :定义一类产品对象的接口。
  4. Concrete Product :具体的产品实现对象,通常在具体工厂里面,会选择具体的产品实现对象,来创建符合抽象工厂定义的方法返回的产品类型的对象。
  5. Client :客户端,主要使用抽象工厂来获取一系列所需要的产品对象,然后面向这些产品对象的接口编程,以实现需要的功能。

二、举例说明

  • 场景:客户使用抽象的工厂接口创建一组相关的产品,而不需要关心实际产出的具体产品是什么。
  • 具体需求:在人机对战中有两种模式:简单、中级;每种模式都会创建一个法师英雄、一个射手英雄,要求设计一个可扩展的程序,实现切换模式,产生不同级别的英雄。

三、代码实现

  1. 创建抽象的产品:法师、射手

    public interface Mage {
        String getName();
    }
    
    public interface Shooter {
        String getName();
    }
    
  2. 创建产品的实现(简单法师、射手;中级法师、射手)

    /**
     * 简单模式下的法师
     *
     * @author: jsk
     * @date: 2019/6/1 18:29
     */
    public class SmallMage implements Mage {
        @Override
        public String getName() {
            return "我是一个弱小的法师...    法术伤害100+";
        }
    }
    
    /**
     * 中级模式下的法师
     *
     * @author: jsk
     * @date: 2019/6/1 18:30
     */
    public class BigMage implements Mage {
        @Override
        public String getName() {
            return "我是一个超级厉害的法师!  法术伤害500+";
        }
    }
    
    /**
     * 简单模式下的射手
     *
     * @author: jsk
     * @date: 2019/6/1 18:31
     */
    public class SmallShooter implements Shooter {
        @Override
        public String getName() {
            return "我是一个弱小的射手... 攻击力100+";
        }
    }
    
    /**
     * 中级模式下的射手
     *
     * @author: jsk
     * @date: 2019/6/1 18:30
     */
    public class BigShooter implements Shooter {
        @Override
        public String getName() {
            return "我是一个超级厉害的射手!   攻击力500+";
        }
    }
    
  3. 创建游戏模式(抽象工厂)

    public interface GameFactory {
        /**
         * 获取法师
         *
         * @return
         */
        Mage getMage();
    
        /**
         * 获取射手
         *
         * @return
         */
        Shooter getShooter();
    }
    
  4. 游戏模式的实现(简单模式、中级模式)

    public class SimpleGameFactory implements GameFactory {
        @Override
        public Mage getMage() {
            return new SmallMage();
        }
    
        @Override
        public Shooter getShooter() {
            return new SmallShooter();
        }
    }
    
    public class MiddleGameFactory implements GameFactory {
        @Override
        public Mage getMage() {
            return new BigMage();
        }
    
        @Override
        public Shooter getShooter() {
            return new BigShooter();
        }
    }
    
  5. 客户端调用

    	public static void main(String[] args) {
            GameFactory gameFactory = new SimpleGameFactory();
            start(gameFactory);
    
            System.out.println("*******结束了*********");
            System.out.println("游戏太简单了,换个难度等级吧!");
    
            gameFactory = new MiddleGameFactory();
            start(gameFactory);
        }
    
        public static void start(GameFactory gameFactory) {
            System.out.println("游戏开始了!");
            System.out.println(gameFactory.getMage().getName());
            System.out.println(gameFactory.getShooter().getName());
        }
    

执行结果在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值