[] Kotlin Kotlinシングルトン(怠惰なスタイルとタイプの悪役| Javaのシングルトン| Kotlinシングルトン|オブジェクト宣言|コンパニオンオブジェクト|入手方法|?!!文と空)



暴漢のI. Lanhan式単一の実施形態



1.はじめにシングルトンクラス: 単一の実施形態では、アプリケーションのメモリは、設計パターンの一例のみが存在することを保証することです。


①飢え式は: このクラスは限りクラスはに呼ばれて、すぐにシングルトンオブジェクト(空腹オブジェクトクラス)を作成する必要がありますそのシングルトンオブジェクトを使用するかどうか、ステートメントの限り、オブジェクト。

②怠惰なスタイル: あなたは、クラスのオブジェクトを宣言すると、オブジェクトのみを(怠惰作成されたオブジェクト)を作成するために、シングルトンオブジェクトを取得するには、唯一のクラスを何もしなくても、クラスのみが唯一のオブジェクトを作成するために、シングルトンオブジェクトを取得します。



2つのシングルトンクラスの機能:


プライベート静的シングルトンのメンバ変数。

民営化コンストラクタ。

公共の静的例取得部と


以下の4つの例を詳しく見てのJavaおよびKotlin単一の実施形態の例の詳細



怠惰な種類とタイプの悪役でII。ジャワ



。1人のJavaの飢えた男、シングルモードの例: 最初のカテゴリでは、シングルトンオブジェクトを作成するために呼び出されます。

package singleton.java;

/**
 * 饿汉单例模式
 *      在类第一次被调用就创建单例对象
 */
public class Student {

    // 1 . 私有静态化单例成员变量 ( 饿汉模式 )
    private static Student student = new Student();

    // 2 . 私有化构造函数
    private Student(){}

    // 3 . 公共静态获取单例方法
    public static Student getStudent(){
        return student;
    }

}


。2 Javaの怠惰な人間のシングルトンパターン: オブジェクト内のシングルトンオブジェクトを作成するだけで、単一のケースを取得します。

package singleton.java;

/**
 * 懒汉单例模式
 *      只有在单例对象获取时才创建单例对象
 */
public class Student {

    // 1 . 私有静态化单例成员变量
    private static Student student;

    // 2 . 私有化构造函数
    private Student(){}

    // 3 . 公共静态获取单例方法
    public static Student getStudent(){

        // 懒汉模式
        if(student == null){
            student = new Student();
        }
        return student;
    }

}


Javaの怠惰暴漢式と式を対応するIII。Kotlin



1 Kotlin飢えシングルトン: Kotlinは、1行のコードは非常に簡単に実現することができるされているシングルトンパターンを飢え、行のアクションコードと同一である学生は、Javaで上記シングルモードの実施形態を飢え調理。

package singleton.kotlin

/**
 * 饿汉式单例模式实现
 * 		被 object 关键字修饰的类时静态类 , 该类的成员方法和变量都是静态的
 *      调用时直接使用 Student.study() 即可调用该方法 
 */
object Student {
    fun study(){
        println("学习")
    }
}

この例では、対象声明に関し、次のセクションでは説明してご覧ください。



2 Kotlin単一アイドラ実施形態: 本実施例は、上記で定義されたコンパニオン・オブジェクトフィールドゲッター方法に関するものであり、無駄に追加の知識判定!!待って、?

package singleton.kotlin

/**
 * 懒汉式单例模式实现
 *
 * 1 . 私有化构造函数
 */
class Student private constructor() {

    /**
     * 伴生对象
     */
    companion object {

        // 2 . 私有化静态变量 , 赋值为空
        // ? 符号表示该变量任何时候不会报空指针异常 , 该变量可以为 空 null
        private var student : Student? = null
            //这是 Kotlin 中特有的 get set 方法定义方式
            //  在成员变量的下面可以直接定义该成员的 get() set() 方法
            get() {
                if (student == null){
                    student = Student()
                }
                return student
            }

        // 3 . 公共 ( 默认 ) 静态方法 , 获取 student 成员
        //  !! 表示该对象必须不能为空
        public fun getSingleton() : Student{
            return student!!
        }

        /**
         * 定义普通方法
         */
        fun study(){
            println("学习")
        }

    }



}

//调用单例方法测试
fun main() {

    //伴生对象方法 可以直接使用 Student.伴生对象方法 进行调用
    //学习
    Student.study()

    //学习
    Student.Companion.study()

}

この例では、コンパニオン・オブジェクトの宣言、ゲッターメソッド、および他の知識点を含む!!、次のセクションで説明を参照?;



IV。Kotlinオブジェクト(オブジェクト)の文



。1つのオブジェクトのオブジェクトの宣言: Kotlinはシングルトンであるスチューデント・オブジェクト・クラスを使用して宣言。

object Student {
    fun study(){
        println("学习")
    }
}

クラス2のタイミング(原点飢餓モード)のシングルトンインスタンス: 直ちにシングルトンを飢えシングルトンクラスの対応するインスタンススチューデントシングルトンを使用して、ステートメントオブジェクト後、


3.継承前記 オブジェクト・クラスは、単一の実施形態を変更し、他のクラスを継承することができます。


4シングルトンオブジェクトクラスオブジェクト呼び出しステートメント: 直接学生コールにクラス名を使用して、次のコールを使用して、研究()メソッドシングルトンコールクラス上述したように、クラスの名前は、シングルトンオブジェクトと等価です。

//调用 Student 单例对象的
Student.study()


V. Kotlin関連オブジェクト(コンパニオン・オブジェクト)



1.関連オブジェクト: 内部クラス・オブジェクト、オブジェクトが関連付けられている、修飾されたコンパニオン・オブジェクトを使用して、シングルトンクラスは、クラスの内部です。


2.関連するオブジェクト名: シングルトンパターン上記遅延、関連付けられたオブジェクト名は、省略された場合のデフォルト名コンパニオン。


実施例3シングルコール: 直接関連付けられたクラスオブジェクトのメソッド呼び出しを使用することができ、オブジェクトの上および関連する定義された学生のクラス、Student.Companion持つ学生が同等であり、したがって試験は、次の2つの方法は、オブジェクトの呼び出しを関連付けられています方法;

//调用单例方法测试
fun main() {

    //伴生对象方法 可以直接使用 Student.伴生对象方法 进行调用
    //学习
    Student.study()

    //学习
    Student.Companion.study()

}


VI。?!!役割と



?!!と使用: ?!!と変数名に変更変数名の後に追加されます。


?①アクション: 変数名の増加の後ろの記号を使用して、変数がnullに割り当てることができることを示しています;?

②!!効果: 使用!!シンボルは変数名に付加され、それは変数がNULLに割り当てられていないことを示しています。

公開された307元の記事 ウォンの賞賛1043 ビュー170万+

おすすめ

転載: blog.csdn.net/han1202012/article/details/105003973