总结
这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!
某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!
成功只会留给那些有准备的人!
策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,地位都是一样的,因此可以实现算法之间可以互相替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的。所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。【获取资料】
运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。
经常见到的是,所有的具体策略都有一些公有的行为。这时候,就应该把这些公有的行为放到共同的抽象策略角色
Strategy类里面。这时不能使用接口,应该使用抽象类来实现。
🧾2.策略模式的结构
=====================================================================================================================================
策略模式包含三部分内容:(如下图所示)
-
a.一个或多个使用策略对象的客户.(环境角色)
-
b.一个代表某个算法的接口, 它是策略模式的接口. (抽象策略角色)
-
c.一个或多个该接口的具体实现, 它们代表了算法的多种实现.(具体策略角色)
[
](https://jq.qq.com/?_wv=1027&k=0IsBuUb0)
🧾3.策略模式的应用
=====================================================================================================================================
- a.容错恢复机制, 程序运行的时候, 如果发生某种错误, 系统并不会直接挂掉或者说影响系统的其他功能点.
而是系统可以容忍这样的错误, 并且事先提供好了这种容错恢复机制, 来使得程序正常的运行下去.
- 例如: 一个系统要对所有的操作进行日志记录, 且需要把日志记录落库, 方便后续的使用, 但是在把日志记录落库的时候,
可能会发生错误, 如数据库出现问题, 那就先可以记录在文件里面, 等到数据库问题修复, 再把文件中的日志记录同步到数据库中去.
对于这样的功能设计, 可以采用策略设计模式, 根据需要在运行期间进行动态的切换.
- b.假设现在要设计一个会员机制的购物系统, 对本系统的所有SVIP提供打八折的购物优惠,
对本系统的所有VIP提供打九折的购物优惠, 对非会员购物不打折. 那么对于这样的系统功能设计, 也可以采用策略模式来设计.
- c.使用不同的条件(物品的重量或者颜色等)来筛选库存中的物品, 可以将这一模式应用到更广泛的领域,
比如使用不同的标准来验证输入的有效性, 使用不同的方式来分析或者格式化输入.
🧾 4.策略模式Demo
=======================================================================================================================================
假设现在需要根据业务的需求,对调用接口传进来的参数,选择合适的策略进行处理,这里假设有策略一和策略二。
Client:
/**
-
@author lyh
-
@version v-1.0.0
-
@since 2021/6/2
*/
public class Client {
public static void main(String[] args) {
//根据需要客户自行选择策略
//加入Java开发交流君样:756584822一起吹水聊天
//选择策略1
StrategyObj strategyOne = new StrategyObj(new StrategyOne());
System.out.println(strategyOne.strategy(“one”));
//选择策略2
StrategyObj strategyTwo = new StrategyObj(new StrategyTwo());
System.out.println(strategyTwo.strategy(“two”));
}
}
输出:
执行策略1!
执行策略2!
Process finished with exit code 0
策略接口:
/**
- @desc:策略接口
*/
public interface Strategy {
String execute(String s);
}
/**
- @desc:策略接口封装
*/
public class StrategyObj {
private final Strategy strategy;
public StrategyObj(Strategy v) {
this.strategy = v;
}
public String strategy(String s) {
return strategy.execute(s);
}
}
策略实现:
/**
- @desc:策略一
最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
转存中…(img-tLVKxOnC-1715669329135)]