美文网首页程序员
java/python比较学习——由单例模式看创建对象异同点

java/python比较学习——由单例模式看创建对象异同点

作者: 码语者 | 来源:发表于2018-03-29 22:25 被阅读0次

    单例模式,是面向对象23种模式中比较简单的一个,几乎每一个程序员都能快速默写这个模式的范例,在此我就省略这个复制粘贴默写的过程了。
    单例模式的任务是保证系统运行过程中,只能有一个单例类的对象。而单例模式的核心就是控制创建对象的过程只执行一次。

    java中构造方法是创建对象的必经之路。说实话,要不是学习python,用java这么多年我都没想过java中创建对象与构造方法执行的先后顺序,这应该是很正常的,对java程序员来讲执行构造方法就是创建对象,创建对象就是执行构造方法,两者是等价的。java对创建对象的控制是用私有化构造方法,并开放静态方法获取实例实现的。
    python中有两个方法与创建对象有关,一个是__init__,另一个是__new__。毫无疑问,new是创建对象,而init是初始化对象。需要特别注意的是,new是需要返回值的,而返回的这个值就是创建出来的对象。于是我们可以写出这样的代码:

    class X:
        def __new__(cls):
            return Y()
    
    
    class Y:
        pass
        
    
    x = X()
    t = type(x)
    print(t)  # <class '__main__.Y'>
    

    最终结果,x是一个Y对象,java是不支持这么玩的。python对创建对象的控制是基于重新定义new方法,并在新定义的new方法中用逻辑实现,在实现过程中还用到了面向对象的继承和多态的原理,相对java的单例实现来讲要复杂一点,但没有改变创建对象的习惯操作。

    • 由上面的分析可以看出:
      python中的__new__+__init__相当于java的构造方法,并且java中这两个是不能拆开的
      python在执行new,真正创建出对象前可以有逻辑,而java做不到这点
      python不能将__new__+__init__私有化,而java可以

    相关文章

      网友评论

        本文标题:java/python比较学习——由单例模式看创建对象异同点

        本文链接:https://www.haomeiwen.com/subject/xraiqftx.html