Java中的责任链模式
来源:互联网 发布:淘宝女外套 编辑:程序博客网 时间:2024/04/19 07:46
1、责任链模式:
将接收者对象连成一条链,并在该链上传递请求,直到有一个接收者对象处理它。通过让更多有机会处理请求,避免了请求发送者和接收者之间的耦合。
在责任连模式中,作为请求接收者的多个对象通过对其后继的引用而连接起来形成一条链。请求在这条链上传递,直到链上某一个接收者处理这个请求。每个接收者可以自行选择处理这个请求或向后继传递这个请求。
2、责任链模式的实现:
package com.practice.cor.handler;
/*
* 价格处理人,负责处理客户折扣申请
*/
public abstract class PriceHandler {
protected PriceHandler successor;
/*
* 直接后继,用于传递请求
*/
public void setSuccessor(PriceHandler successor) {
this.successor = successor;
}
/*
* 处理折扣申请
*/
public abstract void processDiscount(float discount);
}
package com.practice.cor.handler;
/*
* 销售,可以批准5%以内的折扣
*/
public class Sales extends PriceHandler {
@Override
public void processDiscount(float discount) {
if(discount<=0.05){
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(),discount);
}else{
successor.processDiscount(discount);
}
}
package com.practice.cor.handler;
/*
* CEO,可以批准55%以内的折扣
* 折扣超出55%,就拒绝申请
*/
public class CEO extends PriceHandler {
@Override
public void processDiscount(float discount) {
if(discount<=0.55){
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(),discount);
}else{
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(),discount);
}
}
}
package com.practice.cor.handler;
/*
* 销售经理,可以批准30%以内的折扣
*/
public class Manager extends PriceHandler {
@Override
public void processDiscount(float discount) {
if(discount<=0.3){
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(),discount);
}else{
successor.processDiscount(discount);
}
}
}
package com.practice.cor.handler;
/*
* 销售副总裁,可以批准50%的折扣
*/
public class VicePresident extends PriceHandler {
@Override
public void processDiscount(float discount) {
if(discount<=0.5){
System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(),discount);
}else{
successor.processDiscount(discount);
}
}
}
package com.practice.pattern;
import java.util.Random;
import com.practice.cor.handler.PriceHandler;
/*
* 客户,申请折扣
*/
public class Customer {
private PriceHandler priceHandler;
public void setPriceHandler(PriceHandler priceHandler) {
this.priceHandler = priceHandler;
}
public void requestDiscount(float discount){
priceHandler.processDiscount(discount);
}
public static void main(String[] args) {
Customer customer = new Customer();
customer.setPriceHandler(PriceHandlerFactory.createPriceHandler());
Random random = new Random();
for (int i = 0; i < 100; i++) {
System.out.println(i+":");
customer.requestDiscount(random.nextFloat());
}
}
}
package com.practice.pattern;
import com.practice.cor.handler.CEO;
import com.practice.cor.handler.Manager;
import com.practice.cor.handler.PriceHandler;
import com.practice.cor.handler.Sales;
import com.practice.cor.handler.VicePresident;
public class PriceHandlerFactory {
/*
* 创建PriceHandler的工厂方法
*/
public static PriceHandler createPriceHandler() {
PriceHandler sales = new Sales();
PriceHandler man = new Manager();
PriceHandler vp = new VicePresident();
PriceHandler ceo = new CEO();
sales.setSuccessor(man);
man.setSuccessor(vp);
vp.setSuccessor(ceo);
return sales;
}
}
- Java中的责任链模式
- java中的责任链模式
- java责任链模式
- java责任链模式
- java责任链模式
- java 责任链模式
- java责任链模式
- java责任链模式
- java 责任链模式
- JAVA-责任链模式
- java责任链模式
- java 责任链模式
- Java 责任链模式
- java责任链模式
- Java责任链模式
- java责任链模式
- Java责任链模式
- 谈谈java中的行为型模式:责任链模式
- Hibernate——org.hibernate.StaleStateException: Batch update returned unexpected row count from update
- 最大熵模型中的数学推导
- Arduino - 关于内存
- Canvas基础知识总结之一
- IIS7/8 HTTP Error 500.19 错误 0x80070021
- Java中的责任链模式
- sympy官方文档网站无法打开问题解决
- BAT巨头的开源项目
- Awesome R
- ViewPager只初始化当前页,不会提前初始化下一页的设置
- LeetCode-15-3Sum(证明/KSum)-Medium
- Android Studio 打混淆包遇到的问题
- 创建sqlite数据库
- TrafficStats 网络实时测速