001.单例模式

博客介绍管理类的计划生育,即确保只有一个实例类并提供全局访问点。阐述了最简单的实现原理,通过全局变量声明类,实例化时判断是否已实例化。还给出完整代码,先实例化静态变量,再提供全局访问点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一句话概括   

  管理类的计划生育,  就是确保只有一个实例类, 并且提供一个全局访问点,  就是提供一个老婆。 

 

最简单的实现原理

     通过全局变量声明类,  实例化时再判断有没有实例化.

(只是最精简的原理代码, 并未提供全局访问点)

 

private FormTool  ft;

private void ToolMenu(Object sender, EventArgs e)
{
    if(ft==null)
    {
        ft=new FromTool;
    }
}

 

 

完整代码

     先实例化一个静态变量, 再提供一个全局访问点

 

class Singleton{
    private static Singleton instance;
    
    private Singleton{
        
    }
    
    public  static Singleton getInstance()
    {
        if(instance == null)
        {
            instance=new Singleton();
        }
        return instance;
    }
    
}

 

### 单例模式编程示例 单例模式是一种设计模式,用于确保某个类只有一个实例,并提供全局访问点。以下是基于Java实现的单例模式示例: #### 饿汉式初始化 饿汉式初始化会在类加载时创建对象实例,因此线程安全且无需额外同步开销。 ```java public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 这种方法适用于程序始终需要该实例的情况,或者创建实例的时间/资源成本较低[^1]。 --- #### 测试单例类 尽管单例模式简单易懂,在Java中的实际实现却可能涉及复杂性。为了验证单例类的行为是否符合预期,可以编写单元测试来确认其唯一性和行为一致性[^2]。 --- #### 使用共享状态替代传统单例(Borg模式) Python 中可以通过共享状态的方式实现类似于单例的效果。Alex Martelli 提出了名为 Borg 的方法,通过让所有实例共享相同的 `__dict__` 来达到目的。 ```python class Borg: _shared_state = {} def __init__(self): self.__dict__ = self._shared_state class Singleton(Borg): def __init__(self, **kwargs): super().__init__() self.__dict__.update(kwargs) def __str__(self): return str(self.__dict__) # 创建两个实例并观察它们的状态是否一致 s1 = Singleton(foo="bar") print(s1) # 输出 {'foo': 'bar'} s2 = Singleton(qux="quux") print(s2) # 输出 {'foo': 'bar', 'qux': 'quux'} print(s1) # 输出同样为 {'foo': 'bar', 'qux': 'quux'}, 表明 s1 和 s2 共享相同状态 ``` 此方式的核心在于多个实例共享同一个字典作为属性存储空间,从而实现了逻辑上的单一状态[^4]。 --- ### 总结 无论是 Java 还是 Python,单例模式都可以通过不同的技术手段实现。具体选择取决于应用场景以及语言特性。对于静态类代替单例的设计决策,则需考虑功能需求与性能权衡[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值