Java与Python中单例模式的区别


本文摘自php中文网,作者零到壹度,侵删。

本文实例讲述了Java与Python中单例模式的区别。分享给大家供大家参考,具体如下:

单例模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

一、Java中的单例模式

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

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

/**

 * 单例模式

 * 懒汉式

 *  1)、构造器私有化

 *  2)、声明私有的静态属性

 *  3)、对外提供访问属性的静态方法,确保该对象存在

 */

public class SingleCase {

 

    private static SingleCase sc = null;

 

    private SingleCase() {

    }

 

    public static SingleCase getSingleCase() {

 

        if (sc == null) {

            return new SingleCase();

        }

 

        return sc;

 

    }

}

 

/**

 * 单利模式

 * 饿汉式

 *  1)、构造器私有化

 *  2)、声明私有的静态属性,同时创建该对象

 *  3)、对外提供访问属性的静态方法

 *

 */

class SingleCase01 {

    private static SingleCase01 sc = new SingleCase01();

 

    private SingleCase01() {

    }

 

    public static SingleCase01 getSingleCase() {

        return sc;

    }

}

/**

*   饿汉式

*

*   类在使用的时候加载 ,延缓加载时间

*/

class SingleCase02 {

     

    private static class innerclass{  //内部类

        private static SingleCase02 sc = new SingleCase02();

    }

     

    private SingleCase02() {}

 

    public static SingleCase02 getSingleCase() {

        return innerclass.sc;

    }

}

二、Python中的单例模式

ps:由于python学过的时间有点长,一直也没时间复习,如果有错误希望广大读者指出来。

构建单例模式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

class Test(object):

    __instance = None

    __firstinit = 1

 

    def __new__(cls, *args, **kwargs):

        if Test.__instance == None:

            Test.__instance = object.__new__(cls, *args, **kwargs)

        return Test.__instance

 

    def __init__(self):

        if not Test.__firstinit:

            return

        Test.__firstinit = 0

 

if __name__ == "__main__":

    a = Test()

    b = Test()

    print a

    print b

上例中我们将类的实例保存到一个类属性 __instance 中,一旦类属性不为 None,我们就不再调用 __new__,而是直接返回 __instance。另外为避免每次调用 Test() 都会执行一遍实例初始化,我们引入了一个 __firstinit 的类属性,执行结果:

1

2

<__main__.Test object at 0x000002507FF6E1D0>

<__main__.Test object at 0x000002507FF6E1D0>

值相同,即可证明为同一对象。


相关推荐:

单例模式的6种实现方式

单例模式和多例模式的总结

单例模式解析

java单例模式

以上就是Java与Python中单例模式的区别的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python操作excel详解

Python Pythonpath是什么意思?

Python如何使用unittest测试接口_Python

Python的注释符是什么

Python如何实现简单的用户交互程序(示例)

Python可以做什么工作

Python是面向对象的语言吗

Python用pip安装numpy

Python中multiprocessing库的深入讲解

Python中表达式4+0.5值的数据类型为?

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...