CRUD很无聊?一起学设计模式吧!--策略模式(1)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

抽象策略

首先定义所有计策的抽象类,所有策略的目的都是为了击败对手,定义公共方法 fightEnemy

/**

  • 策略接口,定义所有的接口

  • @date 2019/5/22 9:50

*/

public interface FightStrategy {

/**

  • 杀敌之法

*/

public void fightEnemy();

}

具体策略

我们定义三种策略,分别是美人计,苦肉计,借刀杀人计:

/**

  • 三十六计之美人计

*/

public class HoneyTrapStrategy implements FightStrategy{

@Override

public void fightEnemy() {

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

}

}

/**

  • 三十六计之苦肉计

*/

public class SelfInjuryStrategy implements FightStrategy {

@Override

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();

}

}

最后我们该如何学习?

1、看视频进行系统学习

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

2、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Mybatis 3源码深度解析:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Redis学习笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Spring Boot核心技术-笔记:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
ing Boot核心技术-笔记:

[外链图片转存中…(img-anCN3ljr-1714470842075)]

3、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

[外链图片转存中…(img-3zFzbBzv-1714470842075)]

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
These dependencies were not found: * @/api/second/category/industry in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/trivoltine/std_base/editStructure.vue?vue&type=script&lang=js& * @/api/second/structure/crud in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/trivoltine/std_base/seeStructure.vue?vue&type=script&lang=js& * @/components/tinymce-editor/tinymce-editor.vue in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/trivoltine/std_base/editStructure.vue?vue&type=script&lang=js& * vue-pdf in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/trivoltine/std_base/editStructure.vue?vue&type=script&lang=js& * vue-quill-editor in ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/trivoltine/std_base/editStructure.vue?vue&type=script&lang=js& To install them, you can run: npm install --save @/api/second/category/industry @/api/second/structure/crud @/components/tinymce-editor/tinymce-editor.vue vue-pdf vue-quill-editor
05-23

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值