第二十三 职责链模式
现实问题 校长能处理大于三万的订单 副校长能处理小于二万大于一万 院长处理一万以下的
代码的描述 一个关于订单的class 里面有钱的大小 一个人的抽象类,有一个属性是他自己这个抽象类,有一个设置属性的set方法,有个判断钱的抽象类方法 一个继承抽象类,重写判断钱的方法 方法中有一个if else 方法,如果正确就自己执行,如果不执行就属性的判断钱的方法 main方法中的执行情况 一个实现类的set方法另一个实现类,最后一个连接第一个实现类,最后实现一个单链环状
模式出现的地方 springMvc中的HandlerExecutionChain
class PurchaseRequest{
float price = 0.0;
}
abstract class 人{
人 approve;
String name;
abstract void 判断钱的大小(PurchaseRequest purchaseRequest)
}
class 院长 extends 人{
void 判断钱的大小(PurchaseRequest purchaseRequest){}
if(purchaseRequest.price 条件){
执行
}else{
属性.判断钱的方法
}
}
第二十二 策略模式 鸭子模式 问题 鸭子有很多种 有会叫的 有会飞的 有其他功能的 常用的解决方式 写一个abstract class duck 写几个功能的方法,继承的方式来重写方法 常用的解决方法的弊端 没有个继承类都学需要改写代码。
策略模式: 还是一个abstract class duck 添加接口作为属性,每一个接口就是一个功能,功能方法调用属性的方法 每一个继承类,修改的代码就减少了,实现了代码的分离 main 每一个功能都实现接口,duck的继承类通过set属性将接口的实现类设置为属性
java 用到的地方 comparator 用到了策略模式 Arrays.sort(数组,comparator的实现类) comparator的实现类相当于策略模式中的实现接口的属性 lamdba表达式也用到了 Arrays.sort(数组,(var1,var32) ->{ if(var1.compareTo(var2) > 0){ return 1; } else{ return -1; } });
|