Singleton Pattern در اندروید
یکشنبه 22 آذر 1394در این مقاله قصد داریم در مورد کلاس singletone صحبت نماییم، singletone یک الگو برای design 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:

- Android
- 3k بازدید
- 3 تشکر