Singleton Pattern در اندروید

یکشنبه 22 آذر 1394

در این مقاله قصد داریم در مورد کلاس singletone صحبت نماییم، singletone یک الگو برای design pattern است

Singleton Pattern در اندروید

singletone الگوی ساده برای یادگیری و پیاده سازی است، که از هر نقطه از برنامه ی ما قابل دسترسی است،

از این الگو برای Session و اتصال پایگاه داده و پروتکل های ارتباطی و ... استفاده می شوند.

در این نمونه ما یک مثال ساده قرار داده ایم، که نام کاربری و کلمه ی عبور را می گیرد، ایده این است که از یک نمونه کلاس واحد استفاده شود، و در activity دوم پیغام خوش آمد گویی را برای کاربر نمایش دهد.

در کلاس singletone نام کاربری ذخیره خواهد شد، کلاس singletone به صورت زیر خواهد بود:

  public class SingletonSession {

    private static SingletonSession instance;
    private String username;
    //no outer class can initialize this class's object
    private SingletonSession() {}

    public static SingletonSession Instance()
    {
        //if no instance is initialized yet then create new instance
        //else return stored instance
        if (instance == null)
        {
            instance = new SingletonSession();
        }
        return instance;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

ما دو لایه داریم یکی activity_login و دیگری activity_welcome است:

لایه ی activity_login:

<linearlayout android:layout_height="match_parent" android:layout_width="match_parent" 
android:orientation="vertical" tools:context=".LoginActivity" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools">

    <textview android:id="@+id/textView" android:layout_gravity="center_horizontal" 
    android:layout_height="wrap_content" android:layout_width="wrap_content" 
    android:text="Login Form" android:textappearance="?android:attr/textAppearanceLarge">

    <edittext android:hint="Your Username" android:id="@+id/editUsername" 
    android:layout_height="wrap_content" android:layout_width="match_parent">

    <edittext android:hint="Your Password" android:id="@+id/editPassword" 
    android:inputtype="textPassword" android:layout_height="wrap_content" 
    android:layout_width="match_parent"><button android:id="@+id/btnLogin" 
    android:layout_gravity="center_horizontal" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" android:text="Login">
</button></edittext></edittext></textview></linearlayout>

لایه دوم activity_welcome:

<relativelayout android:layout_height="match_parent" android:layout_width="match_parent" 
tools:context="kamranshahid.singletonimplementation.WelcomeActivity" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools">

    <textview android:gravity="center" 
    android:id="@+id/txtWelcome" android:layout_height="fill_parent" 
    android:layout_width="fill_parent" android:text="Welcome" 
    android:textappearance="?android:attr/textAppearanceLarge">

</textview></relativelayout>  

حالا اجرا کردن singletonsession در دو کلاس جاوای LoginActivity.java وWelcomeActivity.java

کلاس LoginActivity.java:

 public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        Button btnLogin = (Button) findViewById(R.id.btnLogin);
        final EditText editUsername  = (EditText) findViewById(R.id.editUsername);

        btnLogin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // On login button click, storing our username into singleton class.
                SingletonSession.Instance().setUsername(editUsername.getText().toString());

                Intent welcomeActivity = new Intent(LoginActivity.this, WelcomeActivity.class);
                startActivity(welcomeActivity);
            }
        });
    }
}

در LoginActivity.java نمونه ای از کلاس session است، که کلاس singletone ، نام کاربری را از activity  خود دریافت کرده است.

ما در کلاس خود session singletone را صدا می زنیم، و یک نمونه ایجاد و باز می گردانیم.

در آخر کلاس Welcome.java:

   public class WelcomeActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        TextView txtWelcome  = (TextView) findViewById(R.id.txtWelcome);

        //Displaying our username using singleton class.
        txtWelcome.setText("Welcome\n" + SingletonSession.Instance().getUsername());
    }
}

در کلاس بالا ما دوباره کلاس singletone را مثل activitylogin ایجاد وصدا می زنیم، بعد از آن نام کاربری در Text نمایش داده می شود.

خروجی به صورت زیر است:

بعد از زدن دکمه ی Login:

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید