静态代理 设计模式系列4

概述

真实角色,代理角色;真实角色和代理角色要实现同一个接口,代理角色要持有真实角色的引用。创建真实角色的对象和代理角色的对象,并将真实角色对象的引用传给代理角色(可以通过构造参数传递,spring推荐用set注入),让代理角色去执行功能。

代理者替真实角色做不常做的事或不会做的,真实角色更专注做核心事,实现业务分工;

容易扩展,不改变原来代码,真实对象做原来功能,代理去做扩展功能。

一个真实角色一个代理,开发效率变低

示例

//接口
interface Proxy {
	void todo() ;
  }

// 真实角色

class RealityRole implements Proxy {
  @Override
  public void todo() {
​    System.out.println("真实角色的功能");
  }

}

// 代理角色
class ProxyRole implements Proxy {
  // 持有代理角色的引用
  private Proxy realityRole;
  public ProxyRole() {
  }
  //传入一个真实角色
  public ProxyRole(Proxy role) {
​    realityRole = role;
  }

  @Override
  public void todo() {//在真实角色功能运行之前,代理角色做准备工作doBefore();//执行真实角色的功能
​    realityRole.todo();//代理角色的收尾工作doAfter();
  }

  private void doBefore() {
​    System.out.println("准备工作");
  }

  private void doAfter() {
​    System.out.println("收尾工作");
  }

}

 

多线程中静态代理

在Java中线程的设计就使用了静态代理设计模式,其中自定义线程类实现Runable接口,Thread类也实现了Runalbe接口,在创建子线程的时候,传入了自定义线程类的引用,再通过调用start()方法,调用自定义线程对象的run()方法。实现了线程的并发执行

1 public class Test2 {
2
3 public static void main(String[] args) {
4 //Runnable实现类对象,真实角色
5 Thread1 role1 = new Thread1();
6 //线程类代理角色,该类也实现了Runnable接口,代理角色
7 Thread thread1 = new Thread(role1);//传入了真实角色的引用
8
9 thread1.start();
10
11 }
12 }
13
14 class Thread1 implements Runnable {
15
16 @Override
17 public void run() {
18 //TODO
19 }
20
21 }

spring AOP 底层,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值