ホームページ >Java >&#&チュートリアル >Javaデザインパターンにおけるシングルトンパターンの説明

Javaデザインパターンにおけるシングルトンパターンの説明

巴扎黑
巴扎黑オリジナル
2017-07-21 17:03:451419ブラウズ

Java には合計 23 のデザイン パターンがあることを学びました。デザイン パターンはよく知られており、繰り返し使用されており、ほとんどの人が知っている従来のコード経験の概要です。各デザイン パターンはプロジェクト内で繰り返し発生する問題を表すため、デザイン パターンを合理的に使用することで多くの問題を完全に解決できます。

Javaのデザインパターンを学ぶ必要があります。オブジェクト指向では継承とインターフェイスは学んでいませんが、23 の設計パターンの中のシングルトン パターンはすでに理解できます。

シングルトンは、一般的に使用されるデザイン パターンです。 Java アプリケーションでは、シングルトン オブジェクトにより、JVM 内にオブジェクトのインスタンスが 1 つだけ存在することが保証されます。具体的な表現形式は 2 つあります:

package 面向对象;//单例设计模式第一种public class Singleton 
{public static void main(String[] args)
    {
    SingletonDemo a=SingletonDemo.getInstance();
    }
}class SingletonDemo
{private static SingletonDemo a =null;private SingletonDemo(){}public static SingletonDemo getInstance()
    {if(a==null)
        {
            SingletonDemo a=new SingletonDemo();
        }return a;
    }
}

この方法では、メソッドが呼び出されたときのみ新しいオブジェクトが作成されることがわかりますが、マルチスレッドでは問題が発生しやすいため、一般的には次の方法が使用されます開発に使用されます。

 1 package 面向对象; 2  3 public class Singleton_2 
 4 { 5     public static void main(String[] args) 6     { 7         Singleton_2Demo a=Singleton_2Demo.getInstance(); 8     } 9 }10 11 class Singleton_2Demo12 {13     private Singleton_2Demo(){}14     private static Singleton_2Demo a=new Singleton_2Demo();15     public static Singleton_2Demo getInstance()16     {17         return a;18     }19 }

この方法はシンプルで、マルチスレッドの問題を考慮する必要はありません

このデザインパターンを使用して、以前の学習中に書いたオブジェクト指向の演習を調整し、シングルトンパターンを実装しました。

元のコード:

package 面向对象; class Student 
{    private String name;private int number;private String sex;private boolean learn;private String a;
    Student()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }     public void setName(String name)
     {         this.name=name;
     }     public void setNumber(int number)
     {         this.number=number;
     }     public void setSex(String sex)
     {         this.sex=sex;
     }     public void setLearn(boolean learn)
     {         this.learn=learn;
     }     void scan()
    {if(this.learn==true)
        {
            a="在学习";    
        }else{
            a="不在学习";
        }    
         System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a);
    }
    
} class Data
 {     public static void main(String[] arg)
     {
         Student XiaoMin=new Student();
         XiaoMin.setName("小明");
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }

シングルケースモード:

package 面向对象;//实现单例设计模式
 class Student_1 
{    private String name;private int number;private String sex;private boolean learn;private String a;     private Student_1()
     {
         name="未知";
         number=000;
         sex="未知";
         learn=false;
         a="未知";
     }     private static Student_1 b=new Student_1();     public static Student_1 getInstance()
     {         return b;
     }     public void setName(String name)
     {         this.name=name;
     }     public void setNumber(int number)
     {         this.number=number;
     }     public void setSex(String sex)
     {         this.sex=sex;
     }     public void setLearn(boolean learn)
     {         this.learn=learn;
     }     void scan()
    {if(this.learn==true)
        {
            a="在学习";    
        }else{
            a="不在学习";
        }    
         System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a);
    }
    
} class Data_2
 {     public static void main(String[] arg)
     {
         Student_1 XiaoMin=Student_1.getInstance();
         XiaoMin.setName("小王");
         XiaoMin.setNumber(13023);
         XiaoMin.setSex("男");
         XiaoMin.setLearn(true);
         XiaoMin.scan();
     }
 }

以上がJavaデザインパターンにおけるシングルトンパターンの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。