9.26学习笔记

1.早会:

学习推荐列表的算法

计算分值:storke handler内

 /**
  * 计算分值
  *
  * @param hitchGeoBO
  * @return
  */
 private float getScore(HitchGeoBO hitchGeoBO) {
     return ((float) (1 - (hitchGeoBO.getStartGeo().getDistance() * 0.5 + hitchGeoBO.getEndGeo().getDistance() * 0.5) / HtichConstants.STROKE_DIAMETER_RANGE)) * 100;
 }

eg:出发地距离4km,目的地距离5km:

1-( ((4×0.5)+(5×0.5))/100 )

2..了解设计模式:

(学习装饰者设计模式)

建造者模式:

结构型模式:

行为型模式:

1.2 软件设计模式的概念

软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。

1.3 学习设计模式的必要性

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。

正确使用设计模式具有以下优点。

  • 可以提高程序员的思维能力、编程能力和设计能力。

  • 使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。

  • 使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

1.4 设计模式分类

  • 创建型模式

    用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。

  • 结构型模式

    用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。

  • 行为型模式

    用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。

UML图

统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。

UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。

软件设计原则:(详见设计模式day01)

装饰者模式:

装饰者模式,完成路径计费

接口 Valuation

 javapublic interface Valuation {
     float calculation(float km);
 }

这个接口定义了一个方法 calculation(float km),用来计算给定公里数的费用。任何实现这个接口的类都需要提供自己的计算逻辑。

起步价计算类 StartPriceValuation

 javapublic class StartPriceValuation implements Valuation {
     private Valuation valuation;
     private float startingPrice = 13.0F;
 ​
     public StartPriceValuation(Valuation valuation) {
         this.valuation = valuation;
     }
 ​
     @Override
     public float calculation(float km) {
         float beforeCost = (valuation == null ? 0f : valuation.calculation(km));
         return beforeCost + startingPrice;
     }
 }

这个类实现了 Valuation 接口,负责计算起步价。它将其他 Valuation 对象作为参数,并在计算时将起步价加到基于其他策略计算出的费用上。

燃油费计算类 FuelCostValuation

 javapublic class FuelCostValuation implements Valuation {
     private Valuation valuation;
     private float fuelCosPrice = 1.0F;
 ​
     public FuelCostValuation(Valuation valuation) {
         this.valuation = valuation;
     }
 ​
     @Override
     public float calculation(float km) {
         float beforeCost = (valuation == null ? 0f : valuation.calculation(km));
         return beforeCost + fuelCosPrice;
     }
 }

这个类也是实现了 Valuation 接口,负责计算燃油费用。它同样依赖于其他的 Valuation 对象,并在其计算基础上增加燃油费用。

基本费用计算类 BasicValuation

 javapublic class BasicValuation implements Valuation {
     private Valuation valuation;
     private float basicPrice = 2.3F;
 ​
     public BasicValuation(Valuation valuation) {
         this.valuation = valuation;
     }
 ​
     @Override
     public float calculation(float km) {
         float beforeCost = (valuation == null ? 0f : valuation.calculation(km));
         if (km <= 3) {
             return beforeCost;
         }
         return beforeCost + (km - 3) * basicPrice;
     }
 }

这个类实现了超出三公里的基本费用计算。如果公里数大于三公里,按每公里 2.3 元计算

装饰者模式概述

(无限套娃)

装饰者模式是一种结构型设计模式,它允许通过将功能附加到对象来动态地扩展对象的功能。它提供了一种灵活的替代方案,能够在运行时增加对象的功能,而不是通过继承来实现。

特点:
  • 动态扩展:能够在运行时向对象添加功能,而不需要修改对象的结构。

  • 透明性:装饰器和被装饰的对象具有相同的接口,因此客户端代码可以透明地使用装饰过的对象。

  • 组合性:可以将多个装饰器组合在一起,形成更复杂的功能。

  • 使用场景

    1. 当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。

      不能采用继承的情况主要有两类:

      • 第一类是系统中存在大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;

      • 第二类是因为类定义不能继承(如final类)

    2. 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

    3. 当对象的功能要求可以动态地添加,也可以再动态地撤销时。

    优缺点

    优点
    • 灵活性: 可以通过组合不同的装饰者来动态地改变对象的行为。

    • 避免类爆炸: 可以通过装饰者组合来替代复杂的继承结构。

    • 增强可维护性: 各个装饰者类相对独立,易于管理和扩展。

    • 饰者模式可以带来比继承更加灵活性的扩展功能,使用更加方便,可以通过组合不同的装饰者对象来获取具有不同行为状态的多样化的结果。装饰者模式比继承更具良好的扩展性,完美的遵循开闭原则,继承是静态的附加责任,装饰者则是动态的附加责任。

    • 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

    缺点
    • 复杂性: 可能会导致系统中类的数量增加,使得程序的理解和维护变得更加复杂。

    • 调试困难: 装饰者模式的层叠结构可能使得调试过程变得困难,尤其是在深层装饰的情况下。

如何运用装饰器模式

在上面的例子中,StartPriceValuationFuelCostValuationBasicValuation 三个类都是对基础计费逻辑的装饰器。具体使用步骤如下:

  1. 接口设计:首先定义一个接口(如 Valuation),所有装饰类和具体类都实现这个接口。

  2. 基础类:实现基本功能的类(如 BasicValuation),可以直接使用

  3. 装饰类:创建装饰类(如 FuelCostValuationStartPriceValuation),这些类持有一个 Valuation 类型的实例,通过组合的方式调用被装饰对象的 calculation 方法,增加新的功能。

  4. 动态组合:可以根据需要组合不同的装饰类,实现灵活的功能扩展。例如,可以按顺序组合多个装饰类,形成一个复杂的费用计算逻辑。

    :在客户端代码中,将这些装饰器按照需求组合在一起。例如:

     javaValuation valuation = new StartPriceValuation(
                            new FuelCostValuation(
                            new BasicValuation(null)));
     float totalCost = valuation.calculation(5); // 计算 5 公里的总费用

这样,您可以轻松地组合不同的计费策略,而不需要修改原有的逻辑,增强了代码的灵活性和可维护性。

3.了解任务四的有关内容:

实现超时功能⭐⭐⭐⭐

1.1 任务内容

1、当车主邀请乘客后,乘客始终不响应,超过一段时间应自动取消该邀请。

备注:该业务场景也见于电商下单后的支付倒计时功能

任务4.1-Rabbitmq配置

4.继续学习springcloud:配置管理

p67配置管理:Nacos可以进行配置服务

5.学习rabbitmq

springcloud课程的内容p85

同步通讯和异步通讯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值