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爬虫有什么用

Python怎么做大数据分析

Python中有哪些基本数据类型

Python中关于日期加减法的操作详解

Python怎么逆序输出三位数

Python中property函数的用法

mac怎么安装Python

Python yield和yield from用法总结详解

为什么人工智能用Python

Python遍历输出列表中最长的单词

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




打赏

取消

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

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

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

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

评论

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