首页 > 学院 > 开发设计 > 正文

静态代理

2019-11-06 07:13:55
字体:
来源:转载
供稿:网友

1. 静态代理模式

条件:

代理类需要继承或实现被代理类, 且只重写需要特殊处理的方法。

代理类中需要有存放代理类的池子实例, 方便将数据返回到池子中。

用到的类:

User类, 类比connection对象

PRoxyIns类, User类的代理对象, 相当于connection对象的代理对象。 

Instance类, 类比为数据源, 用来存储初始化的User对象

TestProxy: 测试类

静态代理给我的感觉,就是继承父类, 重写父类的方法。 改变父类原有的行为

User类:

package com.cez.study.bean;/** * @desc: user对象, 类比connection对象 * @auth: zona * 2017年3月5日 下午1:29:56 */public class User {	private String name;	private String passWord;		public User() {		super();		// TODO Auto-generated constructor stub	}	public User(String name, String password) {		super();		this.name = name;		this.password = password;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	@Override	public String toString() {		return "User [name=" + name + ", password=" + password + "]";	}		/**	 * 	 * @desc: 创建user对象, 类比创建connection对象	 * @auth: zona	 * 2017年3月5日 下午2:34:01 	 * @return	 */	public User createUser() {		return new User("name", "password");	}		/**	 * 	 * @desc: 销毁user对象, 类比关闭connection链接	 * @auth: zona	 * 2017年3月5日 下午2:34:13 	 * @param user	 */	public void close(User user) {		user = null;	}		/**	 * 	 * @desc: 该方法不需要什么特殊操作, 子类就不需要复写该方法了	 * @auth: zona	 * 2017年3月5日 下午2:40:56 	 * @return	 */	public String say() {		return "my name is "+name+", password is "+password;	}}

ProxyIns类:

package com.cez.study.proxy.statics;import java.util.List;import com.cez.study.bean.User;/** * @desc: User类的代理对象, 相当于connection对象的代理对象。  * @auth: zona * 2017年3月5日 下午1:27:55 */public class ProxyIns extends User{	// 获取user对象的池, 用于获取、返还user对象	private Instance ins = Instance.getInstanceIns();		@Override	public User createUser() {		return ins.creatUser();	}	/**	 *  销毁user方法, 实际是把该user对象,放回到池中。	 */	@Override	public void close(User user) {		ins.recoverUser(user);	}		/**	 * 	 * @desc: 获取可用的user对象集合	 * @auth: zona	 * 2017年3月5日 下午2:43:02 	 * @return	 */	public List<User> getAbleuser() {		return ins.getAbleuser();	}	}

Instance类:

package com.cez.study.proxy.statics;import java.util.ArrayList;import java.util.List;import com.cez.study.bean.User;/** * @desc: 本类可以类比为数据源, 用来存储初始化的链接 * @auth: zona * 2017年3月5日 下午1:28:39 */public class Instance {	private static List<User> userList = new ArrayList<User>();	// 初始化池	static {		if(userList.isEmpty()) {			for (int i = 0; i < 10; i++) {				userList.add(new User("name"+i, "pwd"+i));			}		}	}		/**	 * 	 * @desc: 获取user对象	 * @auth: zona	 * 2017年3月5日 下午2:39:23 	 * @return	 */	public User creatUser() {		if(userList.size() != 0) {			return userList.get(0);		}		return null;	}		/**	 * 	 * @desc: 将使用后的user对象, 放回到连接池	 * @auth: zona	 * 2017年3月5日 下午2:31:52 	 * @param user	 */	public void recoverUser(User user) {		userList.add(user);	}		/**	 * 	 * @desc: 获取现在可用的user对象集合	 * @auth: zona	 * 2017年3月5日 下午2:32:15 	 * @return	 */	public List<User> getAbleuser() {		return userList;	}		//---> 将该池设置为单例	private Instance() {}	private static class InstanceIns{		private static Instance instance = new Instance();	}		public static Instance getInstanceIns() {		return InstanceIns.instance;	}		}

TestProxy类:

package com.cez.study.proxy.statics;import java.util.ArrayList;import java.util.List;import com.cez.study.bean.User;/** * @desc: 测试类 * @auth: zona * 2017年3月5日 下午1:52:58 */public class TestProxy {		public static void main(String[] args) {		name();		name();	}	public static void name() {		ProxyIns proxyIns = new ProxyIns();		List<User> userList = new ArrayList<User>();		for (int i = 0; i < 11; i++) {			User user = proxyIns.createUser();			List<User> innerList = proxyIns.getAbleuser();			System.out.println(user+",  剩余可用实例size:"+innerList.size()+", 实例:"+innerList);			if(user !=null)				userList.add(user);		}		for (int i = 0; i < userList.size(); i++) {			proxyIns.close(userList.get(i));			List<User> innerList = proxyIns.getAbleuser();			System.out.println("剩余可用实例size:"+innerList.size()+", 实例:"+innerList);		}	}}


上一篇:HashMap的put源码解析

下一篇:八皇后问题

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表