Java研究之学习设计模式-多例模式详解



介绍:

所谓的多例模式,实际上就是单例模式(回顾看这里)的自然推广,作为对象的创建模式,多例模式有以下特点:

1可以有多个实例

2多例类必须自己创建,管理自己的实例,并向外界提供自己的实例。

从上面的特点中,可以体会多例模式与单例模式的不同。单例模式只允许一个实例的存在。

单例类图:

多例类图:

类图更直观的表示了多例类,该多例类会提供多个实例,实例的数量我们是可以自己控制的,如果数量不多的话,实例就可以当做是类的内部实例变量;如果实例很多,那么可以用数组,或者可变长度的数组来进行存储。下面看有上限的多例类。

有上限多例类:

有上限的多例类,名字很清楚的说明白了,该类实例数量是有上限的,通常这个上限是由程序员控制的。我们用筛子来举例。

不知道大家打不打麻将,我想麻将是中国广大群众的一种休闲方式。也许各地的打法会有些许的不同。但一般打麻将都需要置筛子。有时筛子是1个,有时是两个,也有可能是3个。这里假定2个筛子。因为筛子的数量确定是2,所以这是一个上限为2的多例类。

示例程序的类图:

示例程序代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import
java.util.Random;

class
Die{

private
static Die
die1=new
Die();//筛子1

private
static Die
die2=new
Die();//筛子2

private
Die(){

//私有的构造子保证外界无法将此类实例化

}

//获取筛子方法,类似简单工厂模式,通过tag决定返回哪个筛子

public
static Die
getDie(int
tag){

if(tag==1)

return
die1;

if(tag==2)

return
die2;

return
null;

}

//掷筛子,返回一个1~6的随机数字。

public
synchronized int
dice(){

Random
random=new
Random();

return
random.nextInt(6)+1;

}

}

public class
Main{

private
static Die
die1,die2;

public
static void
main(String[]
args){

die1 =
Die.getDie(1);

die2
= Die.getDie(2);

System.out.println("筛子1的值是"+
die1.dice());

System.out.println("筛子2的值是"+
die2.dice());

}

}

无上限的多例类:

Java研究之学习设计模式-多例模式详解

时间: 2024-10-19 20:58:28

Java研究之学习设计模式-多例模式详解的相关文章

Java研究之学习设计模式-抽象工厂模式详解

 简介:          当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产[1] 品角色都有两个具体产品.抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化.每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例. 每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式针对的是多个产品等级结构.(摘自百度百科) 话语说得太抽象,程序员最好的表示方式

Java研究之学习设计模式-简单工厂模式详解

 简介: 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 类图: 从UML类图中,可以看出,简单工厂模式的意思,就是把一个类内部,需要生成的部分,提取出来,变为一个工厂,通过工厂来new对象. 假设我们要吃苹果了,我们可以在代码中new一个苹果出来:当我们需要吃香蕉了,我们在代码中new一个香蕉出来.这种做法你会不会觉得麻烦

设计模式之迭代器模式详解(foreach的精髓)

作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,很久没以LZ的身份和各位对话了,前段时间为了更加逼真的解释设计模式,LZ费尽心思给设计模式加入了故事情节,本意是为了让各位在看小说的过程中就可以接触到设计模式,不过写到现在,LZ最深的感触就是,构思故事的时间远远超过了LZ对设计模式本身的研究. 本章介绍迭代器模式,不再采用故事嵌入的讲解方式,主要原因是因为迭代器模式本

【设计模式】策略模式详解

前言 学习设计模式已经有一段时间了,前段时间一直在忙一个安卓的app,没时间更新.今天有点空,本着开源的精神,把策略模式的一些东西分享一下. 注意:博主只是个搞安卓的大三学生狗,以下内容纯属自学的,若有不正确的地方欢迎指出. 正文 转载请注明出处: http://blog.csdn.net/h28496/article/details/46403815 发 表 时 间: 2015年6月7日 作 者 信 息: 中北大学 郑海鹏 举例说明为什么要有策略模式 假设一个场景:我们有一些排序算法,需要观察

JAVA 设计模式之 工厂模式详解

一.简单工厂模式 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类 的实例.属于创建型模式,但它不属于 GOF,23 种设计模式 (参考资料: http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type). 简单工厂模式适用于的场景: 1.适用 于工厂类负责创建的对象较少的场景,    2.且客户端只需要传入工厂类的参数,对于如何创 建对象的逻辑不需要关心. 简单工厂模式缺点: 1

设计模式——享元模式详解

0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~本文原创,转载请注明出处为SEU_Calvin的博客. 春运买火车票是一件疯狂的事情,同一时刻会有大量的查票请求涌向服务器,服务器必须做出应答来满足我们的购票需求.试想,这些请求包含着大量的重复,比如从A地到B地的车票情况,如果每次都重复创建一个车票查询结果的对象,那么GC任务将非常繁重,影响性能

Java I/O学习(附实例和详解)

一.Java I/O类结构以及流的基本概念 在阅读Java I/O的实例之前我们必须清楚一些概念,我们先看看Java I/O的类结构图: Java I/O主要以流的形式进行读写数据. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. 根据处理数据的数据类型的不同可以分为:字符流和字节流. 字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节:

Swift学习之装饰者模式详解

本文和大家分享的主要是swift装饰者模式相关内容,一起来看看吧,希望对大家学习swift有所帮助. 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,例如生活中常用的生日蛋糕,可以添加蓝莓,巧克力来装饰,可以动态地给一个对象添加额外的职责. 装饰者模式.jpg Cake类: class Cake { func cakeTypeName() -> String { return "" } func make() { } } class BirthdayCake: Ca

【设计模式】代理模式详解

前言 博主只是一名大三学生,文章内容难免有不足之处,欢迎批评指正. 正文 转载请注明出处: http://blog.csdn.net/h28496/article/details/46707621 发 表 时 间: 2015年7月1日 什么是代理模式? 为其他对象提供一种代理,用来控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式常被分为远程代理.虚拟代理.保护代理等等. 代理模式的结构 UML类图 角色介