静态代理模式
第一步:接口
/**
* 抽象角色:提供代理角色和真实角色对外提供的公共方法*/
public interface Star {
void confer();//面谈
void signContract();//签合同
void bookTicket();//订票
void sing();//唱歌
void collectMoney();//收尾款
}
第二步:真实实现类 (真实明星)
/**
* 功能: 真实实现,实现接口
*/
public class RealStar implements Star{
@Override
public void confer() {
System.out.println("RealStar.confer()面谈");
}
@Override
public void signContract() {
System.out.println("RealStar.signContract()签合同");
}
@Override
public void bookTicket() {
System.out.println("RealStar.bookTicket()订票");
}
@Override
public void sing() {
System.out.println("张学友.sing()唱歌");//真实角色的操作:真正的业务逻辑
}
@Override
public void collectMoney() {
System.out.println("RealStar.collectMoney()收尾款");
}
}
第三步:代理实现(代理类)
/**
* 功能:代理,实现接口*/
public class ProxyStar implements Star{
private Star star; //真实对象的引用(明星)
@Override
public void confer() {
System.out.println("ProxyStar.confer()代理面谈");
}
@Override
public void signContract() {
System.out.println("ProxyStar.signContract()代理签约");
}
@Override
public void bookTicket() {
System.out.println("ProxyStar.bookTicket()代理订票");
}
@Override
public void sing() {
star.sing();//真实对象的操作(明星唱歌)
}
@Override
public void collectMoney() {
System.out.println("ProxyStar.collectMoney()代理收尾款");
}
public ProxyStar(Star star) { //代理的有参构造,通过构造器给真实角色赋值
this.star = star;
}
}
* 功能:测试 代理模式
*/
public class Test {
public static void main(String[] args) {
//创建真实对象
Star real = new RealStar();
//根据有参构造,创建代理类对象
Star proxy = new ProxyStar(real);
//执行方法
proxy.confer();
proxy.signContract();
proxy.bookTicket();
proxy.sing();//真实对象的操作(明星唱歌)
proxy.collectMoney();
}
/*
* 总结:
* 代理模式 :作用 为其他对象提供一种代理以便控制对这个对象的访问。
* 1.接口——写有真实类抽象出来的方法。
* 2.真实类——实现接口方法,有方法体。
* 3.代理类——实现接口方法,私有属性引用真实对象,构造方法()构造引用的私有真实对象,完成方法体,可根据引用真实对象调用执行真实类方法
* 4.使用操作——创建真实对象,根据有参构造,创建代理类对象,执行调用代理方法
*
*/
}