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 تشکر