创建型模式之多例模式

一.定义
  在多例模式中,多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。
  所谓多例(Multiton Pattern)实际上就是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点:
    1、多例类可以有多个实例
    2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例

  多例模式又划分为有上限多例模式和无上限多例模式两种;
  无上限多例模式:与直接new 对象没有什么区别
  有上限多例模式:实际上是单例模式的推广,如果它的上限是1,那么就成了单例模式了.
  
二、模式结构成员构成
• Multiton:多例
 
三.代码示例
多例模式的几个关键点就在于
1. 通过实例容器保存实例。
2. 利用私有构造阻止外部构造。
3. 提供 getInstantce()方法获取实例
/**
 * 有限多例模式
 */
public class Multiton {
    private static final Multiton MULTITON_1 = new Multiton();
    private static final Multiton MULTITON_2 = new Multiton();
    private static List<Multiton> list = new ArrayList<Multiton>();     //用于放多个实例的list
    private static final int maxCount = 2;//最多的实例数  

    static {
        list.add(MULTITON_1);
        list.add(MULTITON_2);
    }

    private Multiton() {
    }//私有构造方法,避免外部创建实例

    /**
     * @description: 随机拿取实例
     */
    public static Multiton getInstance() {
        Random random = new Random();
        int current = random.nextInt(maxCount);
        return list.get(current);
    }

    /**
     * 工厂方法
     *
     * @param i
     * @return
     */
    public static Multiton getInstance2(int i) {
        switch (i) {
            case 1:
                return MULTITON_1;

            case 2:
                return MULTITON_2;
            default:
                return null;
        }

    }

    /**
     * @description: 指定拿取某一个实例
     */
    public static Multiton getInstance(int index) {
        return list.get(index);
    }
} 
View Code
 
 
四.优点和缺点分析
优点:
 > 可以控制类的实例数量
缺点:
 > 提高了类实例维护复杂度
 
五.应用场景
>当存在这样的类,只需要有限数量实例的情况下,可以使用多例
 

转载于:https://www.cnblogs.com/756623607-zhang/p/9211545.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式通常用于管理全局状态或提供共享资源。 创建单例模式需要以下步骤: 1. 将类的构造函数声明为私有的,以防止外部代码创建新的实例。 2. 在类中创建一个静态方法,该方法将返回类的唯一实例。 3. 在静态方法中,如果类的实例不存在,则创建一个新的实例,然后返回该实例。 4. 如果类的实例已经存在,则直接返回该实例。 以下是一个示例单例模式的实现: ```python class Singleton: _instance = None def __new__(cls): if not cls._instance: cls._instance = super().__new__(cls) return cls._instance ``` 多例模式是一种创建型设计模式,它允许创建多个类的实例,但是实例的数量是有限的,并且由该类的开发者预先设置。多例模式通常用于限制系统中某些资源的数量。 创建多例模式需要以下步骤: 1. 在类中创建一个静态属性,该属性将存储所有实例的列表。 2. 在类中创建一个静态方法,该方法将返回类的下一个可用实例。 3. 在静态方法中,使用类的实例列表来查找下一个可用实例。如果没有可用实例,则创建一个新的实例,并将其添加到实例列表中。 4. 在使用实例时,必须从静态方法中获取实例,而不是使用类的构造函数。 以下是一个示例多例模式的实现: ```python class Multiton: _instances = {} _max_instances = 2 def __new__(cls, instance_id): if len(cls._instances) < cls._max_instances: if instance_id not in cls._instances: cls._instances[instance_id] = super().__new__(cls) return cls._instances[instance_id] else: raise ValueError("Max number of instances reached.") ``` 在上面的示例中,Multiton 类允许创建最多两个实例。在创建实例时,必须提供一个 instance_id 参数,以便区分不同的实例。如果尝试创建超过两个实例,则会引发 ValueError 异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值