【GOF】代理模式(proxy)之静态代理

3 篇文章 0 订阅

    上篇文章中介绍了单例模式的使用,它避免不一致问题,防止状态变化!这篇文章介绍一下代理模式,代理模式为其他对象提供一种代理,以控制对这个对象的访问,它可以在保证不改变原有类的前提下完成对目标类的完善。是给某一个对象提供一个替代者(占位者),使之在client对象和subject对象之间编码更有效率。代理可以提供延迟实例化(lazy instantiation),控制访问等等,代理模式分为静态代理&动态代理。

静态代理结构图:

   

UserManager代码段:

<span style="font-family:KaiTi_GB2312;font-size:18px;">public interface UserManager {

	public void addUser(String userId,String userName);
	
	public void delUser(String userId);
	
	public void modifyUser(String userId,String userName);
	
	public String findUser(String userId);
}</span>
UserManagerImpl代码段:

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class UserManagerImpl implements UserManager {

	@Override
	public void addUser(String userId, String userName) {
		System.out.println("addUser() userid=" + userId);
	}

	@Override
	public void delUser(String userId) {
		System.out.println("delUser() userid=" + userId);
	}

	@Override
	public void modifyUser(String userId, String userName) {
		System.out.println("modifyUser() userid=" + userId);
	}

	@Override
	public String findUser(String userId) {
		System.out.println("findUser() userid=" + userId);
		return null;
	}

}</span>
UserManagerImplProxy代码段:

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class UserManagerImplProxy implements UserManager {

	private UserManager userManager;

	public UserManagerImplProxy(UserManager userManager) {
		this.userManager = userManager;
	}

	@Override
	public void addUser(String userId, String userName) {
		// System.out.println("UserManagerImplProxy/addUser() userid=" +
		// userId);
		userManager.addUser(userId, userName);
	}

	@Override
	public void delUser(String userId) {

	}

	@Override
	public void modifyUser(String userId, String userName) {

	}

	@Override
	public String findUser(String userId) {
		return null;
	}

}</span>
Client代码段:

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class Client {

	public static void main(String[] args) {
		// UserManager userManager = new UserManagerImpl();
		UserManager userManager = new UserManagerImplProxy(
				new UserManagerImpl());

		userManager.addUser("1200", "zhangsan");
	}
}</span>
输出结果:

    通过代理类的方法调用了目标类中的方法,实现了在不违背“开闭原则”的前提下对目标类的修饰,提高了接口的可维护性!但这样这样对每个接口方法都需要一一修改,尽管提高了接口的可维护性,但带来的工作量却是巨大的,所以这就需要作出优化,动态代理便应用而生,下一篇文章中将详细介绍动态代理的原理以及他们之间的区别。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值