首页 > 其他分享 >枚举策略模式

枚举策略模式

时间:2023-11-16 15:14:54浏览次数:31  
标签:策略 pushType 模式 MessagePushStrategy 枚举 com public bitzh String

枚举策略模式将枚举和策略模式相结合,能使代码更加简洁。以下是消息推送相关的案例

1、定义消息推送接口

package com.bitzh.strategy;

public interface MessagePushStrategy {

    void push(String content);

}

2、分别创建邮件推送、短信推送和企业微信推送三个类,实现消息推送接口

package com.bitzh.strategy.impl;

import com.bitzh.strategy.MessagePushStrategy;

public class EmailPushStrategy implements MessagePushStrategy {

    public void push(String content) {
        System.out.println(String.format("邮件消息推送:%s",content));
    }

}
package com.bitzh.strategy.impl;

import com.bitzh.strategy.MessagePushStrategy;

public class SMSPushStrategy implements MessagePushStrategy {

    public void push(String content) {
        System.out.println(String.format("短信消息推送:%s",content));
    }

}
package com.bitzh.strategy.impl;

import com.bitzh.strategy.MessagePushStrategy;

public class WeComPushStrategy implements MessagePushStrategy {

    public void push(String content) {
        System.out.println(String.format("企业微信消息推送:%s",content));
    }

}

3、创建枚举类,将相关策略作为枚举项

package com.bitzh.enums;

import com.bitzh.strategy.MessagePushStrategy;
import com.bitzh.strategy.impl.EmailPushStrategy;
import com.bitzh.strategy.impl.SMSPushStrategy;
import com.bitzh.strategy.impl.WeComPushStrategy;

public enum MessagePushEnum {

    EmailPushStrategy("email",new EmailPushStrategy()),
    SMSPushStrategy("sms",new SMSPushStrategy()),
    WeComPushStrategy("wecom",new WeComPushStrategy());

    private String pushType;
    private MessagePushStrategy pushStrategy;

    MessagePushEnum(String pushType,MessagePushStrategy pushStrategy){
        this.pushType = pushType;
        this.pushStrategy = pushStrategy;
    }

    public String getPushType() {
        return pushType;
    }

    public void setPushType(String pushType) {
        this.pushType = pushType;
    }

    public MessagePushStrategy getPushStrategy() {
        return pushStrategy;
    }

    public void setPushStrategy(MessagePushStrategy pushStrategy) {
        this.pushStrategy = pushStrategy;
    }

    public static MessagePushStrategy build(String pushType){
        if(pushType == null || "".equals(pushType))
            return null;
        for(MessagePushEnum pushEnum: MessagePushEnum.values()){
            if(pushType.equals(pushEnum.getPushType()))
                return pushEnum.getPushStrategy();
        }
        return null;
    }

}

4、进行测试

package com.bitzh;

import com.bitzh.enums.MessagePushEnum;

public class StrategyApplication {

    public static void main(String[] args) {
        MessagePushEnum.build("email").push("你好!");
        MessagePushEnum.build("sms").push("你好!");
        MessagePushEnum.build("wecom").push("你好!");
    }

}

测试结果:

标签:策略,pushType,模式,MessagePushStrategy,枚举,com,public,bitzh,String
From: https://www.cnblogs.com/zoufh/p/17836253.html

相关文章

  • Knative event Brokers and Triggers 事件传递模式实例
    BrokersandTriggers实例说明eventsource:gitlabsource基于MT通道的broker:defaulttriggertrigger-push->sinkevent-display-push过滤条件:dev.knative.sources.gitlab.pushtriggertrigger-tag-push->sinkevent-display-tag_push过滤条件:dev.knative.......
  • 非严格模式下,this有4种绑定机制(默认、隐式、显式、new)
    执行以下选项中的程序,输出结果是undefined的是()Avaro={age:18,a:{fn:function(){console.log(this.age);}}}o.a.fn();BclassAnimal{constructor(color){this.color=color;}getColor(){console.log("animal的颜色是"+this.color)......
  • 非严格模式下color被泄漏到全局作用域中,创建一个全局变量;严格模式下抛出ReferenceErro
    请问在非严格模式下以下JS代码最终的输出是什么?functionchange(obj){with(obj){color='red'}}varbox={size:'15*15'}change(box);console.log(color);AundefinedBnullCredD报错正确答案:C需要明确with会创建一个新的作用域,由于box本身没有......
  • 枚举和注解
    枚举和注解枚举是一组常量集合可以理解:枚举属于一种特殊的类,里面直包含一组有限的特定的对象自定义类实现枚举使用enum关键字实现枚举自定义枚举实现不需要提供setXXXX方法,因为枚举对象值通常为只读对枚举对象/属性使用final+static共同修饰,实现底层优化......
  • 终于有人把VMware虚拟机三种网络模式讲清楚了!
    前段时间VMware更新了,你用上最新版了吗?有几个网工在操作中遇到过各种各样的问题。比如说由于公司服务器重启导致出现下面的问题:在Xshell里连接虚拟机映射时连接失败;能够连接上虚拟机的映射地址,但gitpull时报错无法解析hostname……其实这些都是ip问题导致的,但主要还是虚拟机的网络......
  • C#数据类型、变量规范、常量和枚举
    ......
  • 每日随笔——桥接模式
    [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。类图: 源码:BUSpackagesc9;publicclassBusimplementsTransport{@Overridepub......
  • Android app的暗黑模式适配实现
    原文地址:Androidapp的暗黑模式适配实现-Stars-One的杂货小窝很久之前放在草稿箱的一篇简单笔记,是之前蓝奏云批量下载工具Android版本实现暗黑主题的适配记录本文所说的这里的暗黑主题,应该只支持Android10系统,不过我手头的Flyme系统(Android9)上测试也有效果,其他低版本......
  • Java基础知识回顾10-代理模式
    一、简介代理模式是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过......
  • 块设备的工作模式
    块设备的mknod还是会创建在/dev路径下面,这一点和字符设备一样。/dev路径下面是devtmpfs文件系统。这是块设备遇到的第一个文件系统。我们会为这个块设备文件,分配一个特殊的inode,这一点和字符设备也是一样的。只不过字符设备走S_ISCHR这个分支,对应inode的file_operation......