java开发,必须要懂的23种设计模式——代理模式(静态代理模式)

目录

 

代理模式是什么?

静态代理模式小案例

代码:

UML类图:

疑问(希望看到的大佬解答):

优缺点:

优点:

缺点:


代理模式是什么?

日常中听到“代理”最多的地方,应该是XX销售代理。

比如面膜销售代理

假如销售面膜这个功能,本来是你拥有的,我当你的销售代理时,我就也可以进行销售面膜功能了。

 

那,我当你的代理,有什么好处呢?

1. 你的销路宽了。

   我有我的人脉圈,能把面膜卖给我的亲朋好友。

2. 你承受风险小了。

    面膜出现质量问题时,亲朋好友是来我这要说法,他们不认识你,只知道我卖给他们的。

 

所以说,“代理”其实就是一种,通过另一个人实行你的销售功能,同时能够增强你的销路、降低你风险的一种商业行为。

 

也就是说,在编程中,模仿这种商业模式,让另一个类去实行本类的功能,同时扩展功能、增加安全性的一种模式。

静态代理模式是什么

 

知道代理是啥了,再来简单聊一下静态。

 

静态,静态,静止状态。就是说,只能代理固定的类,就叫做静态代理。

 

静态代理是代理模式中的一种。代理模式还有:动态代理和Cglib代理,这些我会再其他文章讲解。

 

静态代理模式小案例

 

 

接下来,咱们用代码把上边代理销售面膜来实现一波。

 

代码:

卖面膜接口

package 代理模式.静态代理;

public interface IMaskSeller {
	// 买面膜方法
	void sellMask();
}

你——被代理者

package 代理模式.静态代理;
// 你是被代理对象
public class You implements IMaskSeller {

	@Override
	public void sellMask() {
		System.out.println("卖面膜");
	}

}

我——代理类

package 代理模式.静态代理;
// 我代理你
public class Me implements IMaskSeller {
	
	private You you;
	
	public Me(You you) {
		this.you=you;
	}

	@Override
	public void sellMask() {
		/*
		 * 相同的方法,增强后,在执行买面膜方法
		 * 此处可以实现多种增强
		 * 		1. 增加日志
		 * 		2. 安全验证
		 * 		3. 数据验证
		 * 		4. 或者直接飞起以前的方法,此处重写
		 * 		等
		 * 		等
		 */
		System.out.println("我是代理,能把面膜卖给自己的盆友");
		you.sellMask();
	}

}

我的朋友——客户端

package 代理模式.静态代理;
// 相当于客户端
public class MyFriend {

	public static void main(String[] args) {
		// 此处是个疑问点
		You you = new You();
		Me me = new Me(you);
		me.sellMask();
	}

}

UML类图:

看不懂UML图的童鞋,可以进我的博客主页,学习UML类图。

 

如上所示:

1. 被代理者,代理者,同时实现统一接口。

2. 代理者调用被代理者的方法。

3. 客户端,实例化被代理类,传递给代理类,调用代理类的方法实现业务。

 

疑问(希望看到的大佬解答):

 

静态代理模式,代理的是一个类,为什么不在代理类里边直接实例化被代理类,反而要到客户端去实例化?

学习还是要继续,继续带着疑问学下去,如果以后理解了,会在这里写出答案。

当然,我更希望路过的大佬给些指点。

优缺点:

优点:

我已经在代码的注释里边写的很清楚了:

可以实现多种增强
         *         1. 增加日志
         *         2. 安全验证
         *         3. 数据验证
         *         4. 或者直接飞起以前的方法,此处重写
         *         等
         *         等

 

缺点:

当代理类很多时,接口增加一个方法所有的代理类全部都得实现一遍。!

 

以上为个人所学和总结,如果那里不对,希望看到的大佬指正批评!

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值