静态代理

静态代理

代理模式

  1. 代理:代理对象主要用来拦截被代理对象的访问
    - 代理对象可以理解为明星的经纪人,被代理对象可以理解为某个明星
  2. 代理对象要持有真实业务对象,即在代理类中创建被代理类的对象
  3. 代理对象和被代理对象,具备相同的行为方法. 实现同一个接口
  4. 代理对象拦截被代理对象的访问,可以修改访问的参数 返回值 甚至拦截访问

代码演示

  • 创建一个接口
/*
 * 描述明星的接口
 */
public interface Star {
	//成员函数 唱歌
	public abstract void sing(double money);
	//综艺节目
	public abstract void liveShow(double money);
	//睡觉
	public abstract void sleep();
}
  • 被代理类的代码
/*
 * 被代理对象 目标业务对象 明星柳岩
 */
public class LiuYan implements Star{
	//唱歌
	public void sing(double money) {
		System.out.println("唱了一首:甜蜜蜜");
		System.out.println("赚了"+money+"元");
	}
	//参加综艺节目
	public void liveShow(double money) {
		System.out.println("参加了:奔跑吧,兄弟");
		System.out.println("赚了"+money+"元");
	}
	//睡觉
	public void sleep() {
		System.out.println("好累啊,休息一会。。。。。");
	}
}
  • 代理类的代码
/*
 * 代理对象 经纪人
 */
public class SuoGe implements Star {
	// 持有被代理对象
	private LiuYan ly = new LiuYan();
	public void sing(double money) {
		// 对money变量进行判断,修改访问参数
		if (money < 100000) {
			System.out.println("滚,穷屌丝,一边玩泥巴去");
			return;
		}
		System.out.println("我抽取了" + money * 0.2 + "元代理费用");
		ly.sing(money * 0.8);
	}
	public void liveShow(double money) {
		// 对money变量进行判断,修改访问参数
		if (money < 500000) {
			System.out.println("滚,穷屌丝,一边玩泥巴去");
			return;
		}
		System.out.println("我抽取了" + money * 0.2 + "元代理费用");
		ly.liveShow(money * 0.8);
	}
	public void sleep() {
	    //不需要拦截和进行操作,直接放行
		ly.sleep();
	}
}
  • 测试
/*
 * 代理模式演示
 */
public class ProxyDemo1 {
	public static void main(String[] args) {
		// 创建LiuYan对象
//		LiuYan ly = new LiuYan();
//		ly.sing(1000);
//		ly.liveShow(5000);
//		ly.sleep();
		//直接访问经纪人
		SuoGe sg = new SuoGe();
		sg.sing(200000);
		System.out.println("-----------------------------------");
		sg.liveShow(1000000);
		System.out.println("-----------------------------------");
		sg.sleep();
	}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值