一、代理概念
简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用代理的技术,在不修改源代码的基础上,对程序进行增强:权限校验,日志记录,性能监控,事务控制。
二、代理模式介绍
(1)核心角色
①抽象角色(公共接口):定义公共对外方法
②真实角色(周杰伦):实现抽象角色,定义真实角色所实现的业务螺距。
③代理角色(代理人):实现抽象角色,时真实角色的代理,通过调用真实角色的方法来完成业务逻辑,并可以附加自己的操作。
三、源代码
(1)公共接口Star
package com.by.StaticProxy;
/*
1.公共接口,里面是代理人和被代理人的所有方法
*/
public interface Star {
/**
* 公共接口:方便客户调用
*/
/**
* 面谈
*/
void confer();
/**
* 签合同
*/
void signContract();
/**
* 订票
*/
void bookTicket();
/**
* 唱歌
*/
void sing();
/**
* 收钱
*/
void collectMoney();
}
(2)代理角色(经纪人)
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package com.by.StaticProxy;
/*
代理角色实现公共接口,并实现里面的所有的接口方法
*/
public class ProxyStar implements Star{
/*
1.建立代理人和被代理人之间的练习,就是给代理人授权,让其代理,一般使用构造方法,
将需要被代理的人传进去
*/
private Star star;
public ProxyStar(Star star){
this.star=star;
}
@Override
public void confer() {
System.out.println("面谈");
}
@Override
public void signContract() {
System.out.println("签合同");
}
@Override
public void bookTicket() {
System.out.println("订票");
}
@Override
public void sing() {
// 调用sing()方法
star.sing();
}
@Override
public void collectMoney() {
System.out.println("收钱");
}
}
(3)真实角色代码
/*
* Copyright (c) 2020, 2023, webrx.cn All rights reserved.
*
*/
package com.by.StaticProxy;
public class RealStar implements Star{
@Override
public void confer() {
}
@Override
public void signContract() {
}
@Override
public void bookTicket() {
}
@Override
public void sing() {
System.out.println("周杰伦正在唱歌");
}
@Override
public void collectMoney() {
}
}
(4)客户类代码
package com.by.StaticProxy;
public class Client {
public static void main(String[] args) {
/*
1.创建真实角色的对象
*/
Star star=new RealStar();
/*
2.创建代理类的对象,将真实角色对象作为参数传入
*/
ProxyStar proxyStar=new ProxyStar(star);
proxyStar.confer();
proxyStar.bookTicket();
proxyStar.sing();
proxyStar.signContract();
proxyStar.collectMoney();
}
}