美文网首页
策略模式处理不同邮箱异常

策略模式处理不同邮箱异常

作者: lenny611 | 来源:发表于2022-02-20 15:55 被阅读0次

顶层策略接口

package strategy;

public interface MailExceptionStrategy {
    void handleException();
}

qq邮箱异常处理策略

package strategy;

public class QQExceptionStrategy implements  MailExceptionStrategy{
    public void handleException() {
        System.out.println("this is QQMailException!");
    }
}

outlook邮箱处理策略

package strategy;

public class OutlookExceptionStrategy  implements  MailExceptionStrategy{
    public void handleException() {
        System.out.println("this is outlookMailException!");
    }
}

新增的网易邮箱异常处理策略

package strategy;

public class NeteaseExceptionStrategy implements MailExceptionStrategy{
    @Override
    public void handleException() {
        System.out.println("this is 163Exception");
    }
}

策略上下文

package strategy;

public class MailExceptionStrategyContext {
    private MailExceptionStrategy strategy;

    public void handle(MailExceptionStrategy strategy){
        this.strategy=strategy;
        strategy.handleException();
    }

    public void handle(String emailAddress){
        final String mailType = MailType.getTypeByEmailAddress(emailAddress);
        final MailExceptionStrategy strategy = getStrategyByMailType(mailType);
        handle(strategy);
    }
    private MailExceptionStrategy getStrategyByMailType(String mailType){
        if (MailType.QQ.getEmailType().equals(mailType)){
            return new QQExceptionStrategy();
        }else if (MailType.OUTLOOK.getEmailType().equals(mailType)){
            return new OutlookExceptionStrategy();
        }else if (MailType.NETEASE.getEmailType().equals(mailType)){
            return new NeteaseExceptionStrategy();
        } else {
            return new DefaultExceptionStrategy();
        }
    }
}

邮箱类型枚举类

package strategy;

public enum MailType {
    QQ("qq邮箱","qq"),
    OUTLOOK("outlook邮箱","outlook"),
    NETEASE("网易邮箱","163"),


    UNKNOWN("未知邮箱","unknown")
    ;
    private String name;
    private String emailType;

    MailType(String name, String emailType) {
        this.name = name;
        this.emailType = emailType;
    }

    public String getName() {
        return name;
    }

    public String getEmailType() {
        return emailType;
    }

    public static String getTypeByEmailAddress(String emailAddress){
        for (MailType mailType : MailType.values()) {
           if (emailAddress.contains(mailType.getEmailType())){
               System.out.println("this email type is "+mailType.getEmailType());
               return mailType.getEmailType();
           }
        }
        System.out.println("this email type is "+MailType.UNKNOWN.getEmailType());
        return MailType.UNKNOWN.getEmailType();
    }
}

运行主类

package strategy;

public class MailRun {
    public static void main(String[] args) {
        String qqMail="123456789@qq.com";
        String outlookMail="123456789@outlook.com";
        String unknownMail="123111@163.com";
        MailExceptionStrategyContext context=new MailExceptionStrategyContext();
        context.handle(unknownMail);
    }
}

相关文章

  • 策略模式处理不同邮箱异常

    顶层策略接口 qq邮箱异常处理策略 outlook邮箱处理策略 新增的网易邮箱异常处理策略 策略上下文 邮箱类型枚...

  • JS设计模式-其他3-策略模式 & 模板方法模式 & 职责链模式

    策略模式 概念 不同策略分开处理 避免出现大量 if...else 或者 switch...case 演示 未使用...

  • 《Android源码设计模式解析和实战》状态模式

    和策略模式类似且不同;策略模式是切换不同的策略执行不同策略的统一方法;状态模式是切换不同的状态执行执行不同的方法;...

  • EL-Admin框架-异常处理模块

    一、common模块下me.zhengjie.exception包(异常处理)中类的解读 总体上是用类似策略模式的...

  • 策略模式 (Strategy design pattern)

    策略模式是用来封装变化的,在分析过程中需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性...

  • Python基础-day14

    list ​ 枚举 ​ 异常 ​ 异常处理 ​ 自定义异常 ​ 单例设计模式(23设计模式 ...

  • 策略、工厂模式融合 InitializingBean

    策略、工厂模式融合 InitializingBean 策略、工厂模式分别是什么 策略模式 策略模式是将不同的算法封...

  • S9. 策略模式

    策略模式 策略模式定义多种处理同一种场景的不同算法,这些算法可在不影响用户的情况下互相替换。 场景 应用场景 某会...

  • 设计模式之策略模式

    策略模式 1、什么是策略模式     策略模式让算法独立于使用它的客户而独立变化。策略模式重点是封装不同的算法和行...

  • 策略模式

    策略模式的应用场景:针对不同的业务,需要有不同的处理方法(或在不同时间应用不同的业务规则),如租车的时候针对不同的...

网友评论

      本文标题:策略模式处理不同邮箱异常

      本文链接:https://www.haomeiwen.com/subject/orkvlrtx.html