Java最新CRUD很无聊?一起学设计模式吧!--策略模式,阿里巴巴面试会问的问题

最后如何让自己一步步成为技术专家

说句实话,如果一个打工人不想提升自己,那便没有工作的意义,毕竟大家也没有到养老的年龄。

当你的技术在一步步贴近阿里p7水平的时候,毫无疑问你的薪资肯定会涨,同时你能学到更多更深的技术,交结到更厉害的大牛。

推荐一份Java架构之路必备的学习笔记,内容相当全面!!!

成年人的世界没有容易二字,前段时间刷抖音看到一个程序员连着加班两星期到半夜2点的视频。在这个行业若想要拿高薪除了提高硬实力别无他法。

你知道吗?现在有的应届生实习薪资都已经赶超开发5年的程序员了,实习薪资26K,30K,你没有紧迫感吗?做了这么多年还不如一个应届生,真的非常尴尬!

进了这个行业就不要把没时间学习当借口,这个行业就是要不断学习,不然就只能被裁员。所以,抓紧时间投资自己,多学点技术,眼前困难,往后轻松!

【关注】+【转发】+【点赞】支持我!创作不易!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

public void fightEnemy() {

System.out.println(“使用’苦肉计‘取得胜利”);

}

}

/**

  • 三十六计之借刀杀人

*/

public class CollateralStrategy implements FightStrategy{

@Override

public void fightEnemy() {

System.out.println(“使用’借刀杀人‘取得胜利”);

}

}

环境角色

环境角色主要是持有一个具体的策略,我们使用构造器在初始化环境类时传入具体的策略

/**

  • 环境角色-持有具体策略的引用

*/

public class StrategyContext {

private FightStrategy strategy;

public StrategyContext(FightStrategy strategy) {

this.strategy = strategy;

}

public void fight(){

this.strategy.fightEnemy();

}

}

客户端

/**

  • 客户端需要根据具体的对手选择具体的策略

*/

public class FightClient {

public static void main(String[] args) {

FightClient client = new FightClient();

client.fightEnemy(“李四”);

}

private void fightEnemy(String enemyName) {

StrategyContext context = null;

switch (enemyName){

case “张三” :

context = new StrategyContext(new HoneyTrapStrategy());

break;

case “李四”:

context = new StrategyContext(new SelfInjuryStrategy());

break;

case “王二”:

context = new StrategyContext(new CollateralStrategy());

break;

}

context.fight();

}

}

执行结果

640?wx_fmt=png

扩展

在上面例子中客户端需要承担根据敌人选择具体的策略职责,即上面的 case语句的实现逻辑,把这样一大段代码放在客户端会造成客户端臃肿,影响阅读体验,我们有2种优化策略:

简单工厂

使用简单工厂方法,将选择策略的判断逻辑抽取到工厂类中,客户端传入 enemyName给简单工厂生成具体策略,实现逻辑如下:

/**

  • 简单工厂方法

  •  根据敌人名称选择具体的策略	
    

*/

public class StrategyFactory {

public static FightStrategy createFightStrategy(String enemyName){

FightStrategy strategy;

switch (enemyName){

case “张三” :

strategy = new HoneyTrapStrategy();

break;

case “李四”:

strategy = new SelfInjuryStrategy();

break;

case “王二”:

strategy = new CollateralStrategy();

break;

default:

throw new IllegalStateException("Unexpected value: " + enemyName);

}

return strategy;

}

}

接下来改造客户端,选择具体策略的方法使用简单工厂生成:

/**

  • 使用简单工厂构建具体的策略

*/

public class FightClient {

public static void main(String[] args) {

FightClient client = new FightClient();

client.fightEnemy(“张三”);

}

private void fightEnemy(String enemyName) {

FightStrategy strategy = StrategyFactory.createFightStrategy(enemyName);

StrategyContext context = new StrategyContext(strategy);

context.fight();

}

}

策略与简单工厂结合

这里主要改造环境角色类,构造方法不再接收具体的策略对象,而是使用 enemyName作为参数接收,让其拥有根据 enemyName选择策略的能力,改造后的环境类如下:

/**

  • 环境角色 结合简单工厂选择具体的策略

*/

public class StrategyContext {

private FightStrategy strategy;

public StrategyContext(String enemyName) {

switch (enemyName){

case “张三” :

strategy = new HoneyTrapStrategy();

break;

case “李四”:

strategy = new SelfInjuryStrategy();

break;

case “王二”:

strategy = new CollateralStrategy();

break;

default:

throw new IllegalStateException("Unexpected value: " + enemyName);

}

}

public void fight(){

this.strategy.fightEnemy();

}

}

改造后的客户端代码如下:

/**

  • 环境角色拥有选择策略的能力,客户端只需要认识Context角色

*/

public class FightClient {

public static void main(String[] args) {

FightClient client = new FightClient();

client.fightEnemy(“王二”);

}

private void fightEnemy(String enemyName) {

StrategyContext context = new StrategyContext(enemyName);

context.fight();

}

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!

我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!
一共有20个知识点专题,分别是:

Dubbo面试专题

JVM面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Java并发面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Kafka面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MongDB面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MyBatis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

MySQL面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Netty面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

RabbitMQ面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Redis面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

Spring Cloud面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

SpringBoot面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

zookeeper面试专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

常见面试算法题汇总专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

计算机网络基础专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

设计模式专题

这个GItHub上的Java项目开源了,2020最全的Java架构面试复习指南

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

…(img-SjmH36oQ-1715367040067)]

常见面试算法题汇总专题

[外链图片转存中…(img-SHXQD9tN-1715367040067)]

计算机网络基础专题

[外链图片转存中…(img-tM0qZTth-1715367040068)]

设计模式专题

[外链图片转存中…(img-nArkGiK2-1715367040068)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值