java中设计模式(多例)的实例详解
java中设计模式(多例)的实例详解
多例:单例设计模式的变形,可以看成是一个缓存池的单例,而缓存池里面可以存多个数据
实例代码:
//单例+缓存---没有控制池大小 public class A { //1创建一个单例的池 (private即把池封装成单例了) private static Map<String, A> pool = new HashMap<String, A>(); //池--集合: Map:key-value public synchronized static A getInstance(String key){ //2根据key到池中去获取obj A obj = pool.get(key); if(obj==null){ obj = new A(); pool.put(key, obj); } //3如果该obj存在则返回,否则创建一个新的放入池中并返回 return obj}}
import java.util.HashMap; import java.util.Map; //单例+缓存---控制池大小,每个对象的key值由该类内部指定 public class A { //1创建一个单例的池 private static Map<Integer, A> pool = new HashMap<Integer, A>(); //池--集合: Map:key-value //当前对象的序号 private static int num=0; //总数量 private static int MAX_SIZE=3; public synchronized static A getInstance(){ //2根据num到池中去获取obj A obj = pool.get(num); if(obj==null){ obj = new A(); pool.put(num, obj); } num = (num+1)%MAX_SIZE; //范围: 0 ~ MAX_SIZE-1 //3如果该obj存在则返回,否则创建一个新的放入池中并返回 return obj; } }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
Java设计模式之静态工厂模式详解
本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角色. 抽象产品类可以使用接口或者父类来描述产品对象的行为特征. 具体产品类就是某一具体的对象. 静态工厂类有一个静态的方法,含有判断逻辑,决定要创建哪一种具体的产品对象. 其设计模式如下: 抽象产品类 IProduct package org.test.design.sf; public inte
-
Java设计者模式简单工厂模式解析
简介 简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)模式. 简单工厂模式通常是定义一个工厂类,这个类可以根据不同变量返回不同类的产品实例. 简单工厂模式是一种对象创建型模式但是简单工厂模式不属于23种Gof设计模式之一. 实例 如何实现一个具有加减乘除基本功能的计算器? 对于这四种运算来说,都需要两个操作数,差别仅在于返回的结果不同. 由此,我们可以抽象化它们的共性,提炼出一个父类.这个类中包含两个操作数,一个返回结果方法,这个方法
-
java设计模式之抽像工厂详解
一.概念 提供一个创建一系列相关或相互依赖对像的接口,而无需指定它们具体的类. 二.模式动机 这一系列对像之间是相互依赖的,相当于一个产品族 三.模式的结构 通过上图我们可以清楚的看到抽像工厂模式包括以下4个角色: 1.抽像工厂角色(AbstractFactory):抽像工厂模式的核心,与具体的商业逻辑无关,通常是一个JAVA接口或者抽像类. 2.具体工厂角色(Concrete Factory):该角色通常与具体的商业逻辑紧密相关,该角色里面的工厂方法依据具体的商业逻辑实例化具体的产品并返回
-
java 设计模式(DAO)的实例详解
java 设计模式(DAO)的实例详解 应用场景:在Java程序中,经常需要把数据持久化,也需要获取持久化的数据,但是在进行数据持久化的过程中面临诸多问题(如:数据源不同.存储类型不同.供应商不同.访问方式不同等等),请问如何能以统一的接口进行数据持久化的操作? 其实这个我没学号(≧ ﹏ ≦).我的理解就是一个产品面向的用户不是单一的,所以我们要兼容许多情况如前面提到的数据源不同.存储类型不同.供应商不同.访问方式不同等等. ★ 解决方案 DAO的理解: 1.DAO其实是利用组合工厂模式来解决问
-
java 设计模式之State(状态模式)
java 设计模式之State(状态模式) 在状态模式中,一个类的行为基于它的状态的改变而改变.状态模式归属于行为型模式. 在下面的实例中,我们创建了一个接口State,定义了一个操作方法,两个实现类StartState和StopState.另外,创建了一个上下文类Context,这个类关联到State类.UML类图如下所示: //状态类 public interface State { public void doAction(Context context); } //实现类StartSta
-
java 中模式匹配算法-KMP算法实例详解
java 中模式匹配算法-KMP算法实例详解 朴素模式匹配算法的最大问题就是太低效了.于是三位前辈发表了一种KMP算法,其中三个字母分别是这三个人名的首字母大写. 简单的说,KMP算法的对于主串的当前位置不回溯.也就是说,如果主串某次比较时,当前下标为i,i之前的字符和子串对应的字符匹配,那么不要再像朴素算法那样将主串的下标回溯,比如主串为"abcababcabcabcabcabc",子串为"abcabx".第一次匹配的时候,主串1,2,3,4,5字符都和子串相应的
-
java 设计模式之单例的实例详解
java 设计模式之单例的实例详解 设计模式思想 什么是设计模式:我作为初学者,今天第一次正式学习设计模式,我觉得对与理解什么是设计模式很重要,那么什么是设计模式呢? 设计模式:解决问题的一种行之有效的思想. 设计模式:用于解决特定环境下.重复出现的特定问题的解决方案 我的理解是前人在软件设计的时候碰到了一类问题,他们总结出了一套行之有效,并且经过验证的解决方案. 设计模式的优点: 1.设计模式都是一些相对优秀的解决方案,很多问题都是典型的.有代表性的问题,学习设计模式,我们就不用自己从头来解决
-
JAVA 静态的单例的实例详解
JAVA 静态的单例的实例详解 实现代码: public class Printer { private Printer(){ } public static Printer newInstance(){ return CreatePrinter.mPrinter; } private static class CreatePrinter{ private final static Printer mPrinter = new Printer(); } } 因为静态的单例对象没有作为类的成员变
-
JAVA 静态的单例的实例详解
JAVA 静态的单例的实例详解 实现代码: public class Printer { private Printer(){ } public static Printer newInstance(){ return CreatePrinter.mPrinter; } private static class CreatePrinter{ private final static Printer mPrinter = new Printer(); } } 因为静态的单例对象没有作为类的成员变
-
java static块和构造函数的实例详解
java static块和构造函数的实例详解 构造函数不写时,若该类继续了某个类则会默认集成父类的构造函数. 构造函数在实例化类时执行内部, Object object = new Object(); static 块在每次加载该类的时候都会执行内部. 如下例: package org.webServiceClass; import javax.jws.WebMethod; public class WebSerivceTest { private static int i = 1; WebSe
-
Java中IO流 RandomAccessFile类实例详解
Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文
-
Java编程思想对象的容纳实例详解
Java提供了容纳对象(或者对象的句柄)的多种方式,接下来我们具体看看都有哪些方式. 有两方面的问题将数组与其他集合类型区分开来:效率和类型.对于Java来说,为保存和访问一系列对象(实际是对象的句柄)数组,最有效的方法莫过于数组.数组实际代表一个简单的线性序列,它使得元素的访问速度非常快,但我们却要为这种速度付出代价:创建一个数组对象时,它的大小是固定的,而且不可在那个数组对象的"存在时间"内发生改变.可创建特定大小的一个数组,然后假如用光了存储空间,就再创建一个新数组,将所有句柄从
-
JAVA多线程实现生产者消费者的实例详解
JAVA多线程实现生产者消费者的实例详解 下面的代码实现了生产者消费者的问题 Product.Java package consumerProducer; public class Product { private String id; public String getId() { return id; } public void setId(String id) { this.id = id; } public Product(String id) { this.id=id; } publ
-
java实现可安装的exe程序实例详解
java实现可安装的exe程序实例详解 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格式的jar包: 2.通过安装exe4j软件,将导出的.jar格式的文件制作成.exe格式的可执行的文件,(注意:此时的.exe文件只是可以执行,还不能够安装): 3.通过安装Inno setup软件,将可执行的.exe格式的文件..jar格式的文件以及其它需要的文件制作成一个可安装的.exe格式的文
随机推荐
- 浅谈Python数据类型之间的转换
- 如何解决jQuery EasyUI 已打开Tab重新加载问题
- vue调用高德地图实例代码
- ASP.NET实现图片以二进制的形式存入数据库
- js 父页中的单选按钮取值
- ASP.NET常用函数(推荐)
- asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)
- 用Python做的数学四则运算_算术口算练习程序(后添加减乘除)
- Wordpress 忘记密码的处理方法
- Struts2中接收表单数据的三种驱动方式
- jQuery中closest()函数用法实例
- js实现带缓动动画的导航栏效果
- slice函数的用法 之不错的应用
- Microsoft AntiSpyware微软出品的反间谍软件
- 抢先预览Server 2003 SP1的安全配置向导
- CentOS 6.3安装配置Weblogic-10方法
- for循环中删除map中的元素valgrind检测提示error:Invalid read of size 8
- PHP clearstatcache()函数详解
- Ubantu16.04进行Android 8.0源码编译的流程
- Struts2下拉框实例解析