设计模式(四)——多例模式
所谓多例(Multiton
Pattern)实际上就是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点:
1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。
典型的例子就是数据库线程池,下面我就模拟一下用户取得线程池中连接的简化场景:
先设计这个产生连接的类
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,就是这么简单!
分享到:
相关推荐
编写一个类LimitInstanceClass,该类最多可以实例化指定个数实例。实例的个数用配置文件InstanceLimit.cfg指定。例如,如果InstanceLimit.cfg的内容为2,则LimitInstanceClass最多可以同时存在2个对象。...
基于定制功能开发的旅游类社交APP设计模式研究——以“云游”APP为例.pdf
移动互联网背景下儿童教育APP行为模式研究——以儿童类应用“我是谁”的创意设计为例.pdf
云财务共享服务模式设计——以费用报销流程为例探讨.pdf
促进深度学习的教学模式初探——以“简单机械”为例.pdf
大数据时代中小企业工业设计创新发展模式概述——以黔北地区为例
大数据时代中小企业工业设计创新发展模式概述——以黔北地区为例.pdf
基于翻转课堂的教学模式设计——以计算机网络课程教学为例.pdf
基于PBL的在线教学模式研究——以C语言程序设计课程的应用为例.pdf
基于OBE理念的高校教学模式研究——以C语言程序设计课程为例
基于对分易的线上线下混合式教学模式探索——以C语言程序设计为例
基于SPOC的混合学习模式探究——以中职C语言程序设计课程为例.pdf
基于物联网技术的系统设计模式研究与实践——以商城系统营销策略实现为例.pdf
慕课环境下教学新模式研究——以“C语言程序设计”课程为例.pdf
信息时代下的SOHO模式研究——以佳兴城市综合体设计为例.pdf
基于问题导向的计算机类课程教学模式创新——以“C语言程序设计”为例
线上线下混合式教学模式研究——以“高级语言程序设计”课程为例.pdf
基于超星学习通的混合式教学模式探索——以《C语言程序设计》课程为例
基于微信的混合式教学模式运用——以《C语言程序设计》课程为例.pdf
面向专业应用的C语言程序设计实践教学模式研究——以地球物理测井专业为例.pdf