浏览 4915 次
锁定老帖子 主题:设计模式(四)——多例模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-04
设计模式(四)——多例模式
所谓多例(Multiton
Pattern)实际上就是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点: 典型的例子就是数据库线程池,下面我就模拟一下用户取得线程池中连接的简化场景: 先设计这个产生连接的类
package com.gy.designpattern.multition; import java.util.ArrayList; import java.util.Random; /** * ClassName:MyConnections <br/> * Function: 这个类用于产生多个connection. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2012-7-4 上午11:45:54 <br/> * @author gongyong * @version * @since JDK 1.6 * @see */ public class MyConnections { /** * maxNumOfConnection:允许产生的最大连接数. * @since JDK 1.6 */ private static int maxNumOfConnection = 5; /** * connectionInfoList:装所有连接信息(就是编号)的List. * @since JDK 1.6 */ private static ArrayList<String> connectionInfoList=new ArrayList<String>(maxNumOfConnection); /** * connectionList:装所有连接的List. * @since JDK 1.6 */ private static ArrayList<MyConnections> connectionList=new ArrayList<MyConnections>(maxNumOfConnection); /** * currNumOfConnection:当前的连接号. * @since JDK 1.6 */ private static int currNumOfConnection =0; //私有构造方法 private MyConnections(){ } //私有构造方法 private MyConnections(String info){ connectionInfoList.add(info); } //把所有的连接都产生出来 static{ for(int i=0;i<maxNumOfConnection;i++){ //放在connectionList中的对象和connectionInfoList中的信息是一一对应的 //当然,完全可以去掉这个connectionInfoList,在这个类中设一个变量来保存这个信息 connectionList.add(new MyConnections("我是连接:"+i+"号")); } } /** * getInstance:返回任意一个连接. <br/> * @author gongyong * @return * @since JDK 1.6 */ public static MyConnections getInstance(){ Random random=new Random(); currNumOfConnection=random.nextInt(maxNumOfConnection); return (MyConnections)connectionList.get(currNumOfConnection); } /** * connectionInfo:返回当前连接的信息. <br/> * @author gongyong * @since JDK 1.6 */ public void connectionInfo(){ System.out.println(connectionInfoList.get(currNumOfConnection)); } } 然后,是客户端,用于获取连接:
package com.gy.designpattern.multition; /** * ClassName:Client <br/> * Function: 这是客户端,用于获取连接. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2012-7-4 下午12:51:16 <br/> * @author gongyong * @version * @since JDK 1.6 * @see */ public class Client { public static void main(String[] args){ int userNum=10; for(int i=0;i<userNum;i++){ //用户获取到的连接时随机的 MyConnections conn= MyConnections.getInstance(); System.out.print("第"+i+"个用户获得的连接是:"); conn.connectionInfo(); } } }OK,就是这么简单! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-11-01
不知道我理解的对不对,客户端是不是应该模拟多个用户同时访问才更好一点
|
|
返回顶楼 | |
发表时间:2012-11-07
yyyysh310 写道 不知道我理解的对不对,客户端是不是应该模拟多个用户同时访问才更好一点 对,多例模式就是为了满足并发情况下对同一种资源的使用情况的 |
|
返回顶楼 | |