设计模式(四)——多例模式
所谓多例(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个对象。...
今天我们将深入探讨“抽象工厂模式”(Abstract Factory Pattern),它在“深入浅出设计模式四——多区域比萨加盟店生产比萨实现”中得到了应用。这个模式主要用于创建一系列相关的对象,而无需指定其具体的类。 ...
在本文中,我们将深入探讨设计模式中的"观察者模式",并以`WeatherData`为例进行具体实现。观察者模式是一种行为设计模式,它允许我们定义一个订阅机制,当对象状态发生变化时,可以通知所有依赖它的观察者。这种...
"移动互联网背景下儿童教育APP行为模式研究——以儿童类应用“我是谁”的创意设计为例" 本文将通过研究儿童类应用“我是谁”的设计过程,探索移动互联网背景下儿童教育APP行为模式,並对儿童行为模式的多个角度进行...
在本文中,我们将深入探讨设计模式中的一个经典案例——观察者模式(Observer Pattern),通过具体的实现来理解其工作原理。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生...
设计模式是软件工程中的一种最佳实践,用于解决在不同场景下重复出现的问题。...通过阅读提供的"iOS 设计模式——单例"相关资料,可以深入理解在iOS开发环境中如何有效利用单例模式来优化代码结构和提高程序性能。
“四环节”即“经验唤醒——自主探索——经验提升——研究延伸”,是文章中提出的一种基于深度学习理念的科学认识活动设计模式。这一模式旨在通过四个阶段的活动,帮助幼儿从零基础开始,逐步建立起对某一科学主题...
针对标题中提及的《SPOC环境下混合教学模式研究——以“工业机器人编程与操作”课程为例》,可以总结以下知识点: 1. SPOC的概念、特点以及它和MOOC的区别。 2. 混合教学模式的定义及其在现代教育中的作用和优势。 ...
云财务共享服务模式设计——以费用报销流程为例探讨.pdf
微信引流是社交电商渠道新模式中的重要组成部分,拼多多则是这一模式下的典型代表。拼多多自2015年成立以来,依靠微信强大的社交网络功能,通过拼团的方式吸引用户,以社交关系链为基础,以用户间的信息分享和传播为...
装饰模式是一种设计模式,它允许在不改变对象自身的基础上,在运行时给对象添加新的行为或属性,从而扩展其功能。这种模式遵循开闭原则,即对扩展开放,对修改关闭。在Java等面向对象语言中,装饰模式通常通过继承和...
本文以“车库安全门禁”项目为例,提出了融合人工智能的小学STEAM“双动五环节”教学模式,旨在解决当前小学人工智能课程中存在的问题,并对教学模式的实施过程及评价方式进行深入分析。 首先,文章提出了在小学...
"新工科背景下四元教学设计与实践——以《C语言程序设计》为例" 本文讨论了新工科背景下四元教学设计与实践,以《C语言程序设计》课程为例。文章首先介绍了新工科的概念和发展背景,然后讨论了新工科对课程建设和...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。在C#中,装饰模式常用于扩展对象的功能,同时保持对象接口的一致性。本实例是关于如何在开发图形界面构件库...
为了解决这一问题,本文提出了一种新的营销推广视角——“共享纸巾”,并以此为基础探讨软件设计模式在系统开发中的具体应用,旨在构建一套基于共享经济模式,有别于其他互联网思维延伸的商城管理系统。 文章的研究...
信息时代下的SOHO模式研究——以佳兴城市综合体设计为例.pdf
"基于翻转课堂的教学模式设计——以计算机网络课程教学为例" 本文旨在探讨基于翻转课堂的教学模式设计,以计算机网络课程教学为例。通过对计算机网络课程的教学现状分析,笔者提出了基于翻转课堂的教学模式设计,...
线上线下混合式教学模式研究——以“高级语言程序设计”课程为例.pdf
基于超星学习通的混合式教学模式探索——以《C语言程序设计》课程为例
基于微信的混合式教学模式运用——以《C语言程序设计》课程为例.pdf