Java设计模式中策略模式,发短信消息案例


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

程序汪发现特别是业务中有发消息的模式,特别适合策略模式,当然各种营销模式也可以,代码上代码案例加深下理解吧


具体案例一:

策略模式在发送不同类型消息(如短信、邮件、推送通知等)的场景下非常适用,因为它允许你在运行时选择不同的消息发送策略。下面是一个使用策略模式实现的发送短信消息案例。

策略接口(MessageStrategy)

首先,定义一个策略接口,描述发送消息的行为:

public interface MessageStrategy {
    void sendMessage(String message, String recipient);
}

具体策略类(SMSStrategy)

然后,创建实现MessageStrategy接口的具体策略类,这里以发送短信为例:

public class SMSStrategy implements MessageStrategy {
    @Override
    public void sendMessage(String message, String recipient) {
        // 模拟发送短信的逻辑
        System.out.printf("Sending SMS to %s: %s%n", recipient, message);
    }
}

上下文类(MessageService)

接下来,定义一个上下文类,用于封装策略的使用,并在其中设置和执行策略:

public class MessageService {
    private MessageStrategy strategy;

    public MessageService(MessageStrategy strategy) {
        this.strategy = strategy;
    }

    public void sendMessage(String message, String recipient) {
        strategy.sendMessage(message, recipient);
    }
}

客户端代码

最后,客户端代码可以根据需要选择并使用不同的策略来发送短信:

public class StrategyPatternDemo {
    public static void main(String[] args) {
        // 创建一个发送短信的策略实例
        MessageStrategy smsStrategy = new SMSStrategy();

        // 创建消息服务,传入短信发送策略
        MessageService service = new MessageService(smsStrategy);

        // 使用服务发送短信
        service.sendMessage("Hello, this is a test SMS.""+1234567890");
    }
}

在这个例子中,MessageStrategy接口定义了发送消息的策略,SMSStrategy是具体发送短信的实现。MessageService作为一个上下文,根据传入的策略执行对应的消息发送操作。客户端通过选择不同的策略实例,可以灵活地切换消息发送的方式,而无需修改消息服务的代码,这正是策略模式的优势所在。


具体案例二:

下面通过一个具体的案例来说明策略模式的应用:假设我们有一个鸭子模拟系统,鸭子可以有不同的叫声(呱呱叫、嘎嘎叫等),我们使用策略模式来动态改变鸭子的叫声行为。

首先,定义一个策略接口(DuckQuackBehavior):

public interface DuckQuackBehavior {
    void quack();
}

然后,创建几个实现了该接口的具体策略类:

// 呱呱叫行为
public class Quack implements DuckQuackBehavior {
    @Override
    public void quack() {
        System.out.println("呱呱叫");
    }
}

// 嘎嘎叫行为
public class GagagaQuack implements DuckQuackBehavior {
    @Override
    public void quack() {
        System.out.println("嘎嘎叫");
    }
}

// 沉默不叫行为
public class Squeak implements DuckQuackBehavior {
    @Override
    public void quack() {
        System.out.println("吱吱叫");
    }
}

接下来,定义鸭子的抽象类和具体鸭子类,鸭子类包含对策略的引用:

// 鸭子抽象类
public abstract class Duck {
    protected DuckQuackBehavior quackBehavior;

    public void setQuackBehavior(DuckQuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }

    public void performQuack() {
        if (quackBehavior != null) {
            quackBehavior.quack();
        }
    }
}

// 具体鸭子类
public class MallardDuck extends Duck {
    public MallardDuck() {
        quackBehavior = new Quack(); // 默认呱呱叫
    }
}

public class RubberDuck extends Duck {
    public RubberDuck() {
        quackBehavior = new Squeak(); // 橡皮鸭吱吱叫
    }
}

最后,在客户端代码中,我们可以根据需要动态改变鸭子的行为:

public class StrategyPatternDemo {
    public static void main(String[] args) {
        Duck mallardDuck = new MallardDuck();
        mallardDuck.performQuack(); // 输出:呱呱叫

        mallardDuck.setQuackBehavior(new GagagaQuack()); // 改变行为
        mallardDuck.performQuack(); // 输出:嘎嘎叫

        Duck rubberDuck = new RubberDuck();
        rubberDuck.performQuack(); // 输出:吱吱叫
    }
}

这个例子展示了如何使用策略模式让鸭子在运行时改变它们的叫声行为,体现了行为的可替换性和扩展性。


程序汪接私活项目目录,2023年总结

Java项目分享  最新整理全集,找项目不累啦 07版

程序汪10万接的无线共享充电宝项目,开发周期3个月

程序汪1万接的企业官网项目,开发周期15天

程序汪8万接的共享口罩项目,开发周期1个月

程序汪8万块的饮水机物联网私活项目经验分享

程序汪接的4万智慧餐饮项目

程序汪接的酒店在线开房项目,另外一个好听的名字叫智慧酒店


欢迎添加程序汪个人微信 itwang008  进粉丝群或围观朋友圈

相关推荐

  • f-string,一个非常强大的Python字符串格式化工具
  • GitHub iOS 团队如何利用 Apple-Silicon Actions Runner 减少测试时间
  • Kong AI Gateway 正式 GA
  • 扔掉小红书,国外自由行:Pokémon Go 和 Google Gemini 帮助打造最强旅游 Copilot
  • 远离硅谷、不靠风投!18人团队逆势搞出超人气数据库,CTO 一人5年多写了15万行代码
  • 父亲节的诗:爱的表达
  • 5 个超强大的 3D地球 开发框架!!!
  • 推荐 3 个前端最火的开源框架 !
  • 手把手教你如何用AIGC大模型写一首歌
  • 阿里,2两年多少了5万人。
  • 大模型理解复杂表格,字节&中科大出手了
  • 突发!Sam Altman与OpenAI股东正式提出公司转型,成为营利性公司!!
  • [开源]一个集成多个消息渠道可实时和定时推送的消息推送平台
  • 开源框架中的责任链模式实践
  • 带您认识Modbus ASCII协议
  • 6.3K Star很强!一键同步,跨设备书签管理神器
  • 别惹程序员——印度IT工程师被解雇后删了前东家180台服务器、造成几百万损失
  • 全球开源技术峰会GOTC 2024开启报名通道
  • 投稿 SCI,审稿意见居然是抄的?作者一路闹到 Nature:惹到我你算是踢到钢板了
  • 软科中国大学人工智能专业排名出炉!清华第一!北大爆冷!仅排第13名。。。