静态代理模式

1.什么是代理模式?

提到静态代理模式,就需要了解代理设计模式:

就拿明星与经纪人的关系来说,明星就好比被代理类,明星只需要负责唱歌,表演或给粉丝签名等事务,而类似签合同,面谈,计划日程安排等经纪事务都不需要明星个人去做,可以交给其经纪人来代理完成;

2.代理模式的分类:

  • 静态代理模式(静态的定义代理类,编译前定义好):涉及接口的使用
  • 动态代理模式(动态的生成代理类):涉及接口,反射,Proxy类的相关api

3.代理模式的应用场景:

  1. 安全代理:对外隐藏真实的调用者
  2. 远程代理:通过代理类处理远程方法调用(RMI)
  3. 延迟加载

4.静态代理模式的实现要求:

  1. 提供两个真实的具体的类,代理类与被代理类;
  2. 两个类同时实现同一个接口,接口中定义多个抽象方法(提取代理类,被代理各自的行为任务)
  3. 代理类一定要由被代理对象的引用,为了能在代理类中调用被代理类的重写接口中的方法

5.具体的代码实现:

  1. 提供接口:
    package Proxy;
    
    public interface IStar {
    	//个人签名
    	void personSignature();
    	//表演
    	void show();
    	//订票
    	void bookTickets();
    	//签合同
    	void signContract();
    	//日程安排
    	void schedule();
    	//面谈
    	void interview();
    }
    
  2. 提供被代理类:
    package Proxy;
    //明星类
    public class Star implements IStar{
    	//这里方法体直接写具体了
    	@Override
    	public void personSignature() {
    		System.out.println("Akun个人限量签名照");
    		
    	}
    
    	@Override
    	public void show() {
    		System.out.println("sing dance rap basketball music:Chicken you are so beautiful");
    	}
    
    	@Override
    	public void bookTickets() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void signContract() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void schedule() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void interview() {
    		// TODO Auto-generated method stub
    		
    	}
    	
    }
    

 3.提供代理类:

package Proxy;
//经纪人
public class Agent implements IStar{
	private Star star;
	public Agent(Star star) {
		this.star = star;
	}
	public Agent() {
		
	}
	@Override
	public void personSignature() {
		star.personSignature();
	}

	@Override
	public void show() {
		star.show();
	}

	@Override
	public void bookTickets() {
		System.out.println("经纪人预定车票");
		
	}

	@Override
	public void signContract() {
		System.out.println("经纪人谈合同");
		
	}

	@Override
	public void schedule() {
		System.out.println("经纪人安排演唱会");
		
	}

	@Override
	public void interview() {
		System.out.println("经纪人面谈");
		
	}

	
}

4.测试:

package Proxy;

public class StaticProxyTest {
	public static void main(String[] args) {
		Agent agent = new Agent(new Star());
		agent.personSignature();
		agent.show();
		agent.interview();
		agent.schedule();
		agent.signContract();
		agent.bookTickets();
	}
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值