快速业务通道

Java模式设计之多态模式与多语言支持 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

但是单态模式的精神是允许有限个实例,并不是仅允许一个实例;这种最多只允许有限多个实例,并向整个JVM提供自己实例的类叫做多态类(Multiton),这种模式叫做多态模式(Multiton Pattern),请参见下面的结构图。

Java模式设计之多态模式与多语言支持 - 编程入门网

图4、多态类的结构图。

本章就需要用多态模式来实现资源对象,需要构造出能提供有限个实例,每个实例有各不相同的属性(即Locale代码)。

Java模式设计之多态模式与多语言支持(3)

时间:2010-12-13

有上限多态类

一个实例数目有上限的多态类已经把实例的上限当作逻辑的一部份建造到了多态类的内部;这种多态模式叫做有上限多态模式。

比如每一麻将牌局都需要两个色子,因此色子就应当是双态类。这里就以这个系统为例,说明多态模式的结构。

Java模式设计之多态模式与多语言支持 - 编程入门网

图5、色子的类图。

下面就是多态类Die(色子)的源代码:

package com.javapatterns.multilingual.dice; import java.util.Random; import java.util.Date; public class Die {    private static Die die1 = new Die();    private static Die die2 = new Die();   /**    *  私有的构造子保证外界无法    *  直接将此类实例化    */    private Die()    {    }   /**    *  工厂方法    */    public static Die getInstance(int whichOne)    {      if (whichOne == 1)      {        return die1;      }      else      {        return die2;      }    }   /**    *  掷色子,返还一个在1到6之间的    *  随机数。    */    public synchronized int dice()    {      Date d = new Date();      Random r = new Random( d.getTime() );      int value = r.nextInt();      value = Math.abs(value);      value = value % 6;      value += 1;      return value;    } }

代码清单3、多态类的源代码。

在多态类Die中,使用了饿汉方式创建了两个Die的实例。根据静态工厂方法的参数,工厂方法返还两个事例中的一个。Die对象的dice()方法代表掷色子,这个方法会返还一个在1到6之间的随机数,相当于色子的点数。

package com.javapatterns.multilingual.dice; public class Client {    private static Die die1, die2;    public static void main(String[] args)    {      die1 = Die.getInstance(1);      die2 = Die.getInstance(2);      die1.dice();      die2.dice();    } }

代码清单4、客户端的源代码。

由于有上限的多态类对实例的数目有上限,因此有上限的多态类在这个上限等于1时,多态类就回到了单态类。因此多态类是单态类的推广,而单态类是多态类的特殊情况。

一个有上限的多态类可以使用静态变量储存所有的实例;特别是在实例数目不多的时候,可以使用一个个的静态变量储存一个个的实例。在数目较多的时候,就需要使用静态聚集储存这些事例。

Java模式设计之多态模式与多语言支持(4)

时间:2010-12-13

无上限多态模式

多态类的实例数目并不需要有上限[CAMP02];实例数目没有上限的多态模式就叫做无上限多态模式。

由于没有上限的多态类对实例的数目是没有限制的,因此虽然这种多态模式是单态模式的推广,但是这种多态类并不一定能够回到单态类。

由于事先不知道要创建多少个实例,因此必然是使用聚集管理所有的实例。本章要讨论的多语言支持方案就需要应用到多态模式,关于没有上限的多态模式的实现可以参见下面的讨论。

Java模式设计之多态模式与多语言支持 - 编程入门网

图6、没有上限的多态模式(左)和有上限的多态模式(右)的类图。其中N就是实例数目的上限。

有状态的和没有状态的多态类

如同单态类可以分成

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号