AOP前奏情景:数学计算器 ●要求 ①执行加减乘除运算 ②日志:在程序执行期间追踪正在发生的活动 ③验证:希望计算器只能处理正数的运算

本文探讨了业务代码中混入非业务需求导致的问题,并提出使用动态代理设计模式作为解决方案。通过代理对象包装原始对象,实现了关注点分离,使得日志记录等需求可以在不修改原始业务代码的情况下独立维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

●问题

○代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀。每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点。

○代码分散: 以日志需求为例,只是为了满足这个单一需求,就不得不在多个模块(方法)里多次重复相同的日志代码。如果日志需求发生变化,必须修改所有模块。

 

  1. 动态代理

代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。

package com.aop.proxy;

public interface MathCaculate {
	
	int add(int i,int j);
	int sub(int i,int j);
	int mul(int i,int j);
	int div(int i,int j);
	
}
package com.aop.proxy;

public class success implements MathCaculate {

	@Override
	public int add(int i, int j) {

		int result = i + j;
		
		System.out.println("方法执行后result="+result);
		
		return result;
	}

	@Override
	public int sub(int i, int j) {
int result = i - j;
		
		System.out.println("方法执行后result="+result);
		
		return result;
	}

	@Override
	public int mul(int i, int j) {
int result = i * j;
		
		System.out.println("方法执行后result="+result);
		
		return result;
	}

	@Override
	public int div(int i, int j) {
int result = i / j;
		
		System.out.println("方法执行后result="+result);
		
		return result;
	}

	
}
package com.aop.proxy;

public class Log  implements MathCaculate{

	@Override
	public int add(int i, int j) {
		System.out.println("[日志][方法名:add][方法开始][参数:"+i+","+j+"]");
		
		int result = i + j;
		System.out.println("[日志][方法名:add][方法结束][参数:"+result+"]");
		return result;
	}

	@Override
	public int sub(int i, int j) {
System.out.println("[日志][方法名:add][方法开始][参数:"+i+","+j+"]");
		
		int result = i - j;
		System.out.println("[日志][方法名:add][方法结束][参数:"+result+"]");
		return result;
	}

	@Override
	public int mul(int i, int j) {
System.out.println("[日志][方法名:add][方法开始][参数:"+i+","+j+"]");
		
		int result = i * j;
		System.out.println("[日志][方法名:add][方法结束][参数:"+result+"]");
		return result;
	}

	@Override
	public int div(int i, int j) {
System.out.println("[日志][方法名:add][方法开始][参数:"+i+","+j+"]");
		
		int result = i / j;
		System.out.println("[日志][方法名:add][方法结束][参数:"+result+"]");
		return result;
	}

}
package com.aop.proxy;

public class MathCaculateTest {

	public static void main(String[] args) {

		//MathCaculate caculator = new success();
		
		MathCaculate caculator = new Log();
		caculator.add(5, 5);
		System.out.println();
		caculator.sub(5, 5);
		System.out.println();
		caculator.mul(5, 5);
		System.out.println();
		caculator.div(5, 5);
		System.out.println();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值