-
-
- 负责声明新增功能
- 代替开发人员完成目标方法与新增功能的调用
-
目标方法调用
开发人员==>切面类对象==》
新增功能调用
- 口号
-
- 一个切面类为一个接口服务
优缺点
- 优点
-
- 在不违反开闭原则,不产生重复性编码的情况下,将新增功能与目标方法进行关联
- 第一次将代理模式角色进行了清晰划分
- 明确一个切面类为一个接口服务的————面向接口编程
- 缺点
-
- 后期目标类个数发生变化时,要帮助的目标方法发生变化时,都会导致提供帮助的切面类进行二次维护——————切面类后期维护会过于频繁
演示
接口
public interface BaseService {
void run();
}
目标类
public class Service1 implements BaseService {
@Override
public void run() {
System.out.println("Service1运行");
}
}
public class Service2 implements BaseService {
@Override
public void run() {
System.out.println("Service2运行");
}
}
切面类
public class ServiceAspect {
private BaseService target;
/**
* 输出当前时间
*/
public void getTime(){
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(new Date());
System.out.println("运行结束的时间:" + date);
}
/**
*
* @param i 区分类的id
*/
public void invoke(int i){
if (i == 1) {
target = new Service1();
}
if (i == 2) {
target = new Service2();
}
target.run();
getTime();
}
}
测试类
public class ServiceAspectTest {
@Test
public void getTimeTest(){
ServiceAspect serviceAspect = new ServiceAspect();
serviceAspect.invoke(1);
/*
Service1运行
运行结束的时间:2024-03-27 20:30:20
* */
serviceAspect.invoke(2);
/*
Service2运行
运行结束的时间:2024-03-27 20:30:20
* */
}
}