单例模式的扩展——多例模式

一、前言

    最近整理代码的时候,发现以往或多或少写到一种特殊的单例模式,所以基于好奇心百度了一下,发现这种用户被命名为多例模式,其实就是多类型单例的实现,个人觉得叫做多单例模式比较适当。有点像是工厂模式+单例模式的衍生品,也是一种通用的特殊表现,应用场景还是挺多的。

二、介绍

    都说是基于单例模式扩展的,所以基本来说单例模式的饱汉式饿汉式都是适用于多例模式,网上的多例模式的sample有用单纯的list来存实例,我个人喜欢用map来封装,因为这样比较容易管理实例,下面我贴一下相关代码:

    这是我们最常见的SharedPreferences工具类:


import android.content.Context;
import android.content.SharedPreferences;

import java.util.HashMap;
import java.util.Map;

public class SharedPreferencesHelper {
    private static final String SPF_DEFAULT_PATH = "spf_default_path";
    private static Map<String, SharedPreferencesHelper> mappingg;
    private SharedPreferences mSharedPreferences
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多例模式,也叫对象池模式,是一种创建型模式,它允许我们在需要时创建有限数量的实例,并在使用完毕后将其放回池中,以便其他使用者可以继续使用。 下面是一个简单的多例模式的实现: ```python class ObjectPool: _instances = [] _max_instances = 5 def __init__(self): if len(self._instances) >= self._max_instances: raise Exception("Too many instances!") self._instances.append(self) @classmethod def get_instance(cls): if not cls._instances: for _ in range(cls._max_instances): cls._instances.append(cls()) return cls._instances.pop(0) def release(self): self._instances.append(self) def do_something(self): print("Do something.") ``` 在这个实现中,我们使用类变量`_instances`来保存所有实例,并使用类方法`get_instance()`来获取一个空闲的实例。如果没有空闲的实例,我们就创建新的实例,并将其添加到`_instances`中,然后返回这个实例。我们还定义了`release()`方法,用于将实例返回给池中。 现在,我们可以使用`ObjectPool`类来创建多个实例: ```python o1 = ObjectPool.get_instance() o2 = ObjectPool.get_instance() o1.do_something() o2.do_something() o1.release() o2.release() ``` 这里,我们从池中获取两个实例`o1`和`o2`,然后调用它们的`do_something()`方法。当我们使用完它们后,我们使用`release()`方法将它们返回给池中。注意,我们最多只能创建5个`ObjectPool`实例,因为我们在类变量`_max_instances`中限制了实例的数量。 这样,我们就功将单例模式拓展多例模式

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值