代理模式 Proxy Pattern
代理模式分为了三个角色:
情景:娱乐行业的发展在现今是极为迅猛的,五花八门的各种电影,电视剧,综艺节目充斥在我们的周围,很多很多的人都有着自己心目中的IDOL,每个明星都有着自己的特殊技巧在娱乐业中发光,每位明星都有着自己的经纪人或者是自己的团队,对于各种邀约,商家们首先需要找的不是明星本人而是她的经纪人们洽谈,但是最后需要实际作用的还是明星自己本人呢! 于是我们就可以开始编写我们的小栗子啦!
UML类图
/**
* 代理模式案例
* 抽象角色 接口的定义部分
* @author WQ
*/
public interface Abilities {
void sing();
void dance();
void rap();
}
/**
* 代理模式案例
* 真实对象角色 IDOL类实现部分
* @author WQ
*/
public class IDOL implements Abilities{
@Override
public void sing() {
System.out.println("唱歌!");
}
@Override
public void dance() {
System.out.println("跳舞!");
}
@Override
public void rap() {
System.out.println("Rap 饶舌!");
}
}
/**
* 代理模式案例
* 代理 经纪人类实现部分
* @author WQ
*/
public class Agent implements Abilities{
private IDOL idol;
private float money;
/*
* 通过字段money来对唱歌,跳舞,rao进行控制!
* 到了一定的金额才有相应的功能会被触发!
*/
@Override
public void sing() {
if (money >= 20000){
idol.sing();
}else {
System.out.println("钱不够,本家IDOL不提供唱歌服务!");
}
}
@Override
public void dance() {
if (money >= 80000){
idol.dance();
}else {
System.out.println("钱不够,本家IDOL不提供跳舞服务!");
}
}
@Override
public void rap() {
if (money >= 100000){
idol.rap();
}else {
System.out.println("钱不够,本家IDOL不提供rap服务!");
}
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
public Agent() {
}
public Agent(IDOL idol) {
this.idol = idol;
}
public Agent(IDOL idol, float money) {
this.idol = idol;
this.money = money;
}
}
/**
* 代理模式案例
* 测试案例 客户端实现部分
* @author WQ
*/
public class Test {
public static void main(String[] args){
// 真实对象
IDOL idol = new IDOL();
// 将真实对象提供给代理
Agent agent = new Agent(idol);
//客户第一次出价为9K
System.out.println("第一次测试:");
agent.setMoney(9000f);
agent.sing();
agent.dance();
agent.rap();
//客户第二次出价为11W
System.out.println("第二次测试:");
agent.setMoney(110000f);
agent.sing();
agent.dance();
agent.rap();
}
}
测试结果
代理模式的介绍就到这里啦!!! 上述的代理模式的实现方式也称为静态代理的实现模式,除了静态代理,还有JDK的动态代理和通过CGLIB的动态代理实现模式。
本文分享自 MoziInnovations 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!