java面试题:数字与字母的映射表

前言

好记性不如烂笔头。


问题:

现在有一个数字与字母的映射表,且有以下规则:

映射表:

数字 字母

3 A

7 B

9 C

规则:

1.碰到当前数字时,使用字母替换,例如,3-> A

2.碰到当前数字的倍数时,使用字母替换, 例如:6->A

3.碰到多个数字的倍数时,使用多个对应的字母替代,例如:15 -> AB,21->AC

请根据映射表和规则,给出0-100之间的转换结果,提示:不要直接在for循环中使用if判断,尽可能的使用设计模式。

解决方法:策略模式
策略模式(Strategy Pattern)是一种行为设计模式,它使你能够在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象更改 context 对象的执行算法。

策略模式通常涉及三个角色:

Context(上下文):这个类用一个 Strategy(策略)对象来配置其行为。Context 维护一个对 Strategy 对象的引用,可调用其接口来执行所需策略。

Strategy(策略):这是一个接口或抽象类,定义了所有支持的算法的公共接口。Context 使用这个接口来调用具体的策略实现。

ConcreteStrategy(具体策略):实现了 Strategy 接口的具体类。每个具体策略类都提供了不同的算法或行为。

代码实例:

一、定义策略接口

java 复制代码
package com.service;

/**
 *@Description  定义策略接口
 *@Author yingluo
 *@Date 2024-2-23
 **/
public interface NumberToLetterStrategy {
    public String convert(int number);
}

二、各个数字实现类

java 复制代码
package com.service.impl;

import com.service.NumberToLetterStrategy;

/**
 * Description: 数字3的映射规则创建实现类
 * Author:yingluo
 * Date:2024/2/23
 **/
public class ThreeStrategy implements NumberToLetterStrategy {

    @Override
    public String convert(int number) {
        if(number == 3 || number % 3 == 0){
            return "A";
        }
        return "";
    }
}
java 复制代码
package com.service.impl;

import com.service.NumberToLetterStrategy;

/**
 * Description: 数字7的映射规则创建实现类
 * Author:yingluo
 * Date:2024/2/23
 **/
public class SevenStrategy implements NumberToLetterStrategy {

    @Override
    public String convert(int number) {
        if(number == 7 || number % 7 == 0){
            return "B";
        }
        return "";
    }
}
java 复制代码
package com.service.impl;

import com.service.NumberToLetterStrategy;

/**
 * Description: 数字9的映射规则创建实现类
 * Author:yingluo
 * Date:2024/2/23
 **/
public class NineStrategy implements NumberToLetterStrategy {

    @Override
    public String convert(int number) {
        if(number == 9 || number % 9 == 0){
            return "C";
        }
        return "";
    }
}

三、使用策略对象来执行映射

java 复制代码
package com.control;

import com.service.NumberToLetterStrategy;
import com.service.impl.NineStrategy;
import com.service.impl.SevenStrategy;
import com.service.impl.ThreeStrategy;

import java.util.HashMap;
import java.util.Map;

/**
 * Description: 使用策略对象来执行映射
 * Author:yingluo
 * Date:2024/2/23
 **/
public class NumberToLetterContext {
    private Map<Integer, NumberToLetterStrategy> strategies;

    public NumberToLetterContext(){
        strategies = new HashMap<>();
        strategies.put(3, new ThreeStrategy());
        strategies.put(7, new SevenStrategy());
        strategies.put(9, new NineStrategy());
    }

    public String convert(int number){
        StringBuffer result = new StringBuffer();
        for (NumberToLetterStrategy strategy : strategies.values()){
            result.append(strategy.convert(number));
        }
        return result.toString();
    }
}

四、测试类

java 复制代码
package com;

import com.control.NumberToLetterContext;

/**
 * Description: main方法测试类
 * Author:yingluo
 * Date:2024/2/23
 **/
public class Test {
    public static void main(String[] args) {
        NumberToLetterContext context = new NumberToLetterContext();
        for (int i=0 ; i<=100 ; i++){
            System.out.println(i+"->"+context.convert(i));
        }
    }
}
相关推荐
杨杨杨大侠4 分钟前
Atlas Mapper 教程系列 (1/10):框架概述与设计思路
java·开源·github
椰椰椰耶16 分钟前
[Spring Cloud][3]从零开始简单工程搭建实践详解,远程调用
java·数据库·spring cloud
兔子撩架构27 分钟前
Akka Cluster的整体应用:系统管理的核心支撑
java·架构
毕设源码-李学长31 分钟前
计算机毕业设计java高校多媒体教室管理系统高校多媒体教室综合管理系统高校智能多媒体教室管理平台
java·开发语言·课程设计
AAA修煤气灶刘哥32 分钟前
从 Timer 到 XXL-Job,定时任务调度的 “进化史”,看完再也不怕漏跑任务~
java·后端·架构
Funcy1 小时前
XxlJob 源码分析04:admin与executor通讯
java
托比-马奎尔1 小时前
初识SpringBoot
java·spring boot·后端
前行的小黑炭1 小时前
Android :如何提升代码的扩展性,方便复制到其他项目不会粘合太多逻辑,增强你的实战经验。
android·java·kotlin
-凌凌漆-1 小时前
【Qt】【C++】虚析构函数及 virtual ~Base() = default
java·c++·qt
凯尔萨厮1 小时前
Java学习笔记四(继承)
java·笔记·学习