【设计模式系列19】状态模式原理分析及其和策略模式,责任链模式的区别

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

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

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

1、首先建立一个抽象的状态类,这个类需要定义所有状态的所有行为:

package com.zwx.design.pattern.state;

public abstract class AbstractOrderState {

protected OrderContext orderContext;

public AbstractOrderState(OrderContext orderContext) {

this.orderContext = orderContext;

}

public abstract void payOrder();

public abstract void deliver();

public abstract void receiveGoods();

}

注意这里面集成了一个OrderContext对象,这个对象是用来负责状态的切换的。

2、因为有三个状态,所以我们新建三个具体的状态类来实现抽象状态类:

  • 待支付状态类:

package com.zwx.design.pattern.state;

public class WaitPaidOrderState extends AbstractOrderState {

public WaitPaidOrderState(OrderContext orderContext) {

super(orderContext);

}

@Override

public void payOrder() {//相当于待支付的状态绑定了支付行为

System.out.println(“支付成功”);

this.orderContext.setState(this.orderContext.waitDeliver);//切换状态

}

@Override

public void deliver() {

System.out.println(“对不起,请先付钱”);

}

@Override

public void receiveGoods() {

System.out.println(“对不起,请先付钱”);

}

}

  • 待发货状态类:

package com.zwx.design.pattern.state;

public class WaitDeliverOrderState extends AbstractOrderState {

public WaitDeliverOrderState(OrderContext orderContext) {

super(orderContext);

}

@Override

public void payOrder() {

System.out.println(“你已经付过钱了”);

}

@Override

public void deliver() {

System.out.println(“商品已发货并送达目的地”);

this.orderContext.setState(this.orderContext.receiveGoods);//切换状态

}

@Override

public void receiveGoods() {

System.out.println(“请稍等,商品即将发货”);

}

}

  • 已收货状态类:

package com.zwx.design.pattern.state;

public class ReceiveGoodsOrderState extends AbstractOrderState{

public ReceiveGoodsOrderState(OrderContext orderContext) {

super(orderContext);

}

@Override

public void payOrder() {

System.out.println(“您已经付过钱啦,不要重复付钱哦”);

}

@Override

public void deliver() {

System.out.println(“商品已发货并送达,请不要重复发货”);

}

@Override

public void receiveGoods() {

System.out.println(“用户已收到商品,此次交易结束”);

}

}

我们可以看到,每个状态都绑定了一个行为(也可以支持绑定多个),并且在对应的行为处理完毕之后会流转到下一个状态,对于不属于当前状态的行为则做出相应的回应。

3、再建立一个状态上下文环境类,用来负责具体状态的切换:

package com.zwx.design.pattern.state;

/**

  • @author zwx

  • @version 1.0

  • @date 2020/10/5

  • @since jdk1.8

*/

public class OrderContext {

AbstractOrderState waitPaid;

AbstractOrderState waitDeliver;

AbstractOrderState receiveGoods;

AbstractOrderState currState;//当前状态

public OrderContext() {

this.waitPaid = new WaitPaidOrderState(this);

this.waitDeliver = new WaitDeliverOrderState(this);

this.receiveGoods = new ReceiveGoodsOrderState(this);

currState = waitPaid;

}

void setState(AbstractOrderState state){

this.currState = state;

}

public void payOrder(){

currState.payOrder();

}

public void deliver(){

currState.deliver();

}

public void receiveGoods(){

currState.receiveGoods();

}

}

可以看到,这个类里面也有点委派模式的影子,不同的行为委派给对应的对象进行处理而自己不做处理,只负责状态的切换。

4、最后再新建一个测试类进行测试:

package com.zwx.design.pattern.state;

public class TestState {

public static void main(String[] args) {

OrderContext orderContext = new OrderContext();

orderContext.payOrder();

orderContext.deliver();

orderContext.receiveGoods();

}

}

输出结果为:

支付成功

商品已发货并送达目的地

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

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

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

Spring和Kalka的整合

  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-kNeDiexS-1715488738907)]

  • Kafka实战之削峰填谷

[外链图片转存中…(img-N3LYfTXT-1715488738907)]

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

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

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值