漫谈 策略模式

什么是策略模式

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,是一种对象行为型模式。

策略模式的结构:

◉ Context: 环境类

◉ Strategy: 抽象策略类

◉ ConcreteStrategy: 具体策略类

例如,双十一购物节有各种优惠活动,有满减的、打折的、预售的等等,这些优惠方式其实都是一种算法,算法本身就是一种具体的策略。其中,购物节本身就是 环境类,所有的优惠方式都是抽象为 抽象策略类,每一种优惠方式就是 具体策略类,根据不同的购物情况,使用对应的优惠方式。

为什么要使用策略模式

策略模式很好的体现了 开闭原则高内聚低耦合,可以在不修改原有业务代码的基础上,通过更换策略,或者添加策略来面对业务逻辑的变动。

通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。

例如,双十一的过程中,平台为了进一步增加销售额,临时添加了新的优惠方式:充值会员即可享受折上折。我们只需要继承 抽象策略类,是新一个新的 具体策略类,然后在客户端中使用即可。

当然,策略模式也有一些缺点,随着业务的扩展,代码中将会产生非常多策略类,增加了维护难度;而且,客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

怎么实现策略模式

一、定义抽象策略类

//优惠方式类:抽象策略类
interface Discount {
        public double calculate(double price);
}

二、定义具体策略类

(1)满减优惠策略类

// 满减优惠策略类
class FullMinusDiscount implements Discount {
    // 满减金额
    private final double fullMinus = 20;
    
    public double calculate(double price) {
        System.out.println("满减优惠:");
        return price - fullMinus;
    }
}

(2)打折优惠策略类

// 打折优惠策略类
class DiscountDiscount implements Discount {
    // 折扣
    private final double discount = 0.8;
    
    public double calculate(double price) {
        System.out.println("折扣优惠:");
        return price * discount;
    }
}

(3)预售优惠策略类

// 预售优惠策略类
class PreSellDiscount implements Discount {
    // 折扣
    private final double preSell = 30;
    
    public double calculate(double price) {
        System.out.println("预售优惠:");
        return price - preSell;
    }
}

三、定义环境类

// 定义购物环境类
class Shopping {
    // 价格
    private double price;

    // 维持一个对抽象优惠方式类的引用
    private Discount discount;

    public void setPrice(double price) {
        this.price = price;
    }

    //注入一个优惠方式类对象
    public void setDiscount(Discount discount) {
        this.discount = discount;
    }

    public double getPrice() {
        //调用优惠方式类的折扣价计算方法
        return discount.calculate(this.price);
    }
}

四、模拟客户端调用


public class Client {

    public static void main(String[] args) throws Exception {
        // 实现购物环境类
        Shopping context = new Shopping ();

        // 执行满减优惠
        context.setDiscount(new FullMinusDiscount());
        context.setPrice(100);
        context.getPrice();

        // 执行打折优惠
        context.setDiscount(new DiscountDiscount());
        context.setPrice(100);
        context.getPrice();

        // 执行预售优惠
        context.setDiscount(new PreSellDiscount());
        context.setPrice(100);
        context.getPrice();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java安全漫谈是一本关于Java安全的书籍,深入探讨了Java应用程序在网络环境中的安全性和相关的安全漏洞。该书内容涵盖了Java安全基础、Java虚拟机的安全机制、Java安全管理、Java安全开发等方面的知识。 首先,Java安全基础部分介绍了Java安全模型的原理和特点,包括Java类库的安全特性、权限管理和访问控制、安全策略配置等。这部分内容可帮助开发人员了解Java应用程序的安全需求,并提供相应的解决方案。 其次,Java虚拟机的安全机制是Java应用程序的基石。该书介绍了Java虚拟机的安全沙箱和类加载机制,并讨论了如何利用这些安全机制避免恶意代码的执行和隐患的防范。 此外,Java安全管理部分从用户角度出发,介绍了Java应用程序的安全管理工具和技术,如Java安全策略文件、权限管理和安全认证等。开发人员可以通过合理配置和使用这些工具来提高Java应用程序的安全性。 最后,该书还涉及了Java安全开发过程中的一些最佳实践和常见安全漏洞,如输入验证、跨站脚本攻击(XSS)、SQL注入、跨站请求伪造(CSRF)等。通过学习和掌握这些知识,开发人员可以编写出更加安全的Java应用程序。 总而言之,Java安全漫谈是一本全面讨论Java安全的书籍,内容涵盖了Java安全基础、Java虚拟机的安全机制、Java安全管理和Java安全开发等方面的知识。它对于开发人员和安全从业人员来说,都是一本重要的参考书,有助于提高Java应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值