2021-07-16-【策略模式】

什么是策略模式?

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
就如你去泡妞:不同的小姐姐性格不同喜欢做的事情不同 【如:小菲温柔,喜欢撸猫 、小美活泼,喜欢打球;你约不同的妹子去玩,就会有不同的体验】

策略模式案例

举个实际的例子,如:小菲温柔,喜欢撸猫 、小美活泼,喜欢打球;你约不同的妹子去玩,就会有不同的体验,这时候策略模式就派上用场了

  1. 定义策略接口:

策略接口:

**
 * 玩耍接口
 * @author: zyy
 */
public interface play{
    /**
     * 玩
     * @param People 
     * @return
     */
    PlayResult play(People people);

}

人物类:

/**
 * 人物信息
 * @author: zzy
 */
@Data
public class People {
    /**
     * 人物性格
     */
    private String character;

    /**
     * 人物名称
     */
    private String name;

}

结果集类:

/**
 * @author: zzy
 */
@Data
@AllArgsConstructor
public class PlayResult {
    /**
     * 玩耍活动
     */
    private String result;
}
  1. 定义策略实现类:

和小菲实现:

/**
 * 和小菲
 * @author: zzy
 */
@Service("XiaoFei ")
public class XiaoFei implements Play{

    @Override
    public PlayResult play(People people ) {
        return new PayResult("撸猫活动");
    }

}

和小美实现:

/**
 * 小美
 * @author: zzy
 */
@Service("XiaoMei")
public class XiaoMei implements Play{

    @Override
    public PayResult play(People people ) {
        return new PayResult("打球");
    }

}

这里我把所有和谁玩的类都用 @Service 注解生成 Bean 放入 Spring Bean 容器中了,在使用策略的时候就不用 new 支付对象了,可以直接使用 Bean,这样更贴近业务。

  1. 使用策略:

编写玩耍服务代码:

/**
 * 玩耍服务
 * @author: zzy
 */
@RestController
public class PlayService {

    @Autowired
    private ApplicationContext applicationContext;

    /**
     * 玩耍接口
     * @param character
     * @param name
     * @return
     */
    @RequestMapping("/play")
    public PayResult play(@RequestParam("character") String character,
                    @RequestParam("name") String name) {
        People people = new People ();
        people .setCharacter(character);
        people .setName(name);

        // 根据人物名称获取对应的策略 bean
        Play play= applicationContext.getBean(people .getName(), Play.class);

        // 玩耍活动
        PayResult payResult = payment.pay(people);

        return payResult;
    }

}

测试结果:

http://localhost:8080/pay?character=温柔&name=XiaoFei

{"result":"撸猫活动"}

http://localhost:8080/pay?character=活泼&name=XiaoMei

{"result":"打球"}

策略模式总结

模式优点:

1、干掉繁琐的 if、switch 判断逻辑;

2、代码优雅、可复用、可读性好;

3、符合开闭原则,扩展性好、便于维护;

模式缺点

1)客户端必须知道所有策略类,并自行决定使用那个策略类。

2)策略模式将造成产生很多策略类和对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CVE-2021-44228是一个Apache Log4j 2组件中的严重漏洞,被称为Log4Shell或Log4j RCE。该漏洞允许攻击者通过恶意用户输入触发远程代码执行。当成功利用该漏洞时,攻击者可以在受影响的服务器上执行任意命令,并潜在地获得对系统的完全控制。 要成功执行反弹shell攻击,攻击者通常会选择将恶意命令嵌入到受攻击服务器的Log4j配置文件中。恶意命令将在服务器上被执行,从而使攻击者可以与远程恶意控制服务器建立连接,并进一步执行指令。 然而,由于几个因素,可能导致CVE-2021-44228反弹shell不成功: 1. 受攻击的服务器未及时更新修补程序:Log4Shell漏洞的修复需要用户及时更新受影响的Apache Log4j 2组件版本,并更新配置文件以避免受恶意命令执行的风险。如果服务器未更新至修补程序版本,则攻击者仍然可以利用该漏洞访问服务器,但可能会受到其他安全保护措施的限制。 2. 防火墙或安全设备过滤了恶意命令:如果目标服务器上的防火墙或其他安全设备具有适当的规则和策略,它们可能能够检测到并阻止恶意命令的执行,从而防止成功的反弹shell攻击。 3. 受攻击的服务器具有其他安全防护措施:除了及时更新Log4j组件以修复漏洞之外,许多服务器和网络通常采取其他安全措施来保护系统免受非法访问和攻击。这些安全措施可能包括基于IP、用户身份验证或其他类型的访问控制,可能会限制攻击者成功执行反弹shell攻击。 总结来说,CVE-2021-44228反弹shell不成功可能是由于受影响的服务器未及时更新修补程序、防火墙或其他安全设备过滤了恶意命令,或者服务器上具有其他安全防护措施。要解决这个问题,管理员应确保服务器已正确更新修补程序,并配置适当的安全措施来降低受到此类漏洞攻击的风险。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值