この記事の例では、Java と Python のシングルトン パターンの違いについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
シングルケース モード
シングルケース モードは、一般的に使用されるソフトウェア設計パターンです。そのコア構造には、シングルトンと呼ばれる特別なクラスが 1 つだけ含まれています。シングルトン パターンでは、システム内にクラスのインスタンスが 1 つだけ存在することが保証されます。つまり、クラスにはオブジェクト インスタンスが 1 つだけあります。
/** * 单例模式 * 懒汉式 * 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; } }
PS: 私は長い間 Python を学習してきたので、それを復習する時間がありませんでした。間違いがある場合は、読者に教えてください。それらを指摘してくれるでしょう。式 シングルモードを構築します。
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 bE
の例では、クラスのインスタンスをクラス属性 __instance に保存します。クラス属性が NONE ではなくなると、__New__ を呼び出すのではなく、
_instance を直接返します。さらに、毎回 test() を呼び出すのを避けるために、__firstinit のクラス属性を導入します。実行結果:
<__main__.Test object at 0x000002507FF6E1D0> <__main__.Test object at 0x000002507FF6E1D0>が同じであることを証明できます。物体。
関連する推奨事項:
以上がJavaとPythonのシングルトンパターンの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。