《HeadFirst设计模式》第十一章-3代理模式-保护代理

1.声明

设计模式中的设计思想、图片和部分代码参考自《Head First设计模式》作者Eric Freeman & Elisabeth Freeman & Kathy Siezza & Bert Bates。

在这里我只是对这本书进行学习阅读,并向大家分享一些心得体会。

2.保护代理简介

Java在java.lang.reflect包中有自己的代理支持,利用这个包你可以在运行时动态地创建一个代理,实现一个或多个接口,并将方法地调用转发到我们所指定地类。因为实际地代理类是在运行时创建的,我们称这个Java技术为:动态代理。

我们要利用Java地动态代理创建我们下一个代理实现(保护代理)。但在这之前,先让我们看一下类图,了解一下动态代理是怎么一回事。就和真实世界中大多数的事物一样,它和代理模式的传统意义有一点出入。

因为Proxy是Java自动帮我们创建的,所以我们需要想办法来告诉Proxy类,我需要做什么。我们不能像以前一样把代码放在Proxy类在,因为Proxy不是我们直接实现的。既然代码不能放在Proxy中,那么应该放在那里?代码需要放在InvocationHandler中。InvocationHandler的工作是响应代理的任何调用。我们可以把InvocationHandler想成是代理受到方法调用后,请求做实际工作的对象。

3.保护代理的使用 

3.1需求

某约会网站需要让我们帮他们制作约会后的评分系统。可以为约会对象打分。

3.2初步代码

玩家信息超类-PersonBean:

//用户信息接口
public interface PersonBean {
 
	//名称
	String getName();
	//性别
	String getGender();
	//爱好
	String getInterests();
	//平均评分
	int getHotOrNotRating();
 
    void setName(String name);
    void setGender(String gender);
    void setInterests(String interests);
    void setHotOrNotRating(int rating); 
 
}

玩家信息实现类-PersonBeanImpl:

public class PersonBeanImpl implements PersonBean {
	String name;
	String gender;
	String interests;
	//总评分
	int rating;
	//被评价次数
	int ratingCount = 0;
  
	public String getName() {
		return name;	
	} 
  
	public String getGender() {
		return gender;
	}
  
	public String getInterests() {
		return interests;
	}
   
	//获得平均评分
	public int getHotOrNotRating() {
		if (ratingCount == 0) return 0;
		return (rating/ratingCount);
	}
  
 
	public void setName(String name) {
		this.name = name;
	}
 
	public void setGender(String gender) {
		this.gender = gender;
	} 
  
	public void setInterests(String interests) {
		this.interests = interests;
	} 
  
	//更新总评分和被评价次数
	public void setHotOrNotRating(int rating) {
		this.rating +=
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值