Android中常见的设计模式

1.单例模式
public class singleton{
private volatitle static instance; //使用volatile 表明每次都会去内存中读取最新的值; static 表明生成周期和当前应用一样

  public singleton(){
    }

    public static singleton getInstance(){  //同样使用静态方法获取
         if(instance == null){
              synchronized (singleton.classs){ //在多线程中获取需要进行同步,或者会导致同步问题
                   if(instance == null)
                         instance = new singleton();   
              }
         }
         return instance;
    }
}
companion object {
        // lazy 本身就是线程安全的加载方式
        val instance: RetrofitFactory by lazy {
            RetrofitFactory()
        }
    }

Builder模式

public class TestBuider {

    static class Builder {
        public Builder() {
        }

        public void setTitle(String msg){

        }
        public void setContent(String msg){

        }
    }
}

var builder =TestBuider.Builder()
            builder.setContent("")
 TestBuider.Builder builder1 = new TestBuider.Builder();
        builder1.setContent("");

策略方法模式

public interface IUserManager {
    /**
     * @Decription 注册
     **/
    void register(final UserDALEx user, final ICallBackObject<UserDALEx> callBack);

    /**
     * @Decription 登陆
     **/
    void login(final Context context, final String name, final String psw, final ICallBackObject<UserDALEx> callBack);
}
 
定义不同的实现方法
public class BmobUserManager implements IUserManager {


    @Override
    public void register(UserDALEx user, final ICallBackObject<UserDALEx> callBack) {
        。。。
    }
 @Override
    public void login(Context context, String name, final String psw, final ICallBackObject<UserDALEx> callBack) {
       ...
    }

当然这里还肯定可以用其他对象的方法去实现它。在应用的初始化中过程中设置使用哪一种方法.
//初始化云数据库
        IUserManager userManager = new BmobUserManager();
        Bmob.initialize(this, NCAppContext.ApplicationID);
        CloudManager.getInstance().setUserManager(userManager);
。。。
}

工厂方法模式

工厂方法模式
我们创建的activity或者fragment中,定义基类的时候,可以将每个界面不同的地方抽象出来,让真正实现的子类去实现该统一的方法。

基类的方法

public interface IBase<P> {
    /**
     * 功能描述:给view绑定数据
     **/
    void onInitView(Bundle savedInstanceState);

    /**
     * 功能描述:获得布局文件Id
     **/
    int getLayoutResource();
}

在不同的实现子类activity或者fragment中去实现该方法

public class LoginActivity implements  IBaseview{

   @Override
    public void onInitView(Bundle savedInstanceState) {
     //....
    }
   
    @Override
    public int getLayoutResource() {
        return R.layout.activity_login;
    }

}

观察者模式
https://www.cnblogs.com/fuyouG/p/fuyou-A-entryName.html
在安卓中观察者模式用的比较多的地方在数据库变化或者listview内容有变化时,使用notifyDataSetChanged()方法。

public ContactListAdapter netAdapter;
mNetDataList.addAll(mList);
netAdapter.notifyDataSetChanged();
notifyDataSetChanged()该函数的定义在adapter中
public final void notifyDataSetChanged() {
       mObservable.notifyChanged();
}

通知所有被观察者去更新。
Android观察者模式的简单实现demo
观察者模式就是:当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新。

下面介绍一种简单的使用方法,(下面有demo链接)先看一下project的目录构成:

ObserverListener是观察者接口,SubjectListener是被观察者接口,ObserverManager是观察者的管理类。

复制代码
1 /**
2 * Created by Administrator on 2016/9/28.
3 * 观察者接口
4 /
5
6 public interface ObserverListener {
7 void observerUpData(String content);//刷新操作
8 }
复制代码
复制代码
1 /
*
2 * Created by Administrator on 2016/9/28.
3 * 被观察者接口
4 */
5
6 public interface SubjectListener {
7 void add(ObserverListener observerListener);
8 void notifyObserver(String content);
9 void remove(ObserverListener observerListener);
10 }
复制代码
下面是比较重要的管理类:

复制代码
1 public class ObserverManager implements SubjectListener {
2 private static ObserverManager observerManager;
3 //观察者接口集合
4 private List list = new ArrayList<>();
5
6 /**
7 * 单例
8 /
9 public static ObserverManager getInstance(){
10 if (null == observerManager){
11 synchronized (ObserverManager.class){
12 if (null == observerManager){
13 observerManager = new ObserverManager();
14 }
15 }
16 }
17 return observerManager;
18 }
19
20 /
*
21 * 加入监听队列
22 /
23 @Override
24 public void add(ObserverListener observerListener) {
25 list.add(observerListener);
26 }
27
28 /
*
29 * 通知观察者刷新数据
30 /
31 @Override
32 public void notifyObserver(String content) {
33 for (ObserverListener observerListener : list){
34 observerListener.observerUpData(content);
35 }
36 }
37
38 /
*
39 * 监听队列中移除
40 */
41 @Override
42 public void remove(ObserverListener observerListener) {
43 if (list.contains(observerListener)){
44 list.remove(observerListener);
45 }
46 }
47 }
复制代码
效果是当点击ThirdActivity中的按钮时,执行ObserverManager.getInstance().notifyObserver(“观察者请刷新信息”);

然后所有添加到监听队列的Activity都会更新数据,ObserverManager.getInstance().add(this)就是添加到监听队列的方法,更新操作执行在observerUpData(String content)方法中。

下面是3个Activity,很简单:

复制代码
1 public class MainActivity extends AppCompatActivity implements ObserverListener {
2 private TextView textView;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7 textView = (TextView) findViewById(R.id.tv);
8 findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
9 @Override
10 public void onClick(View v) {
11 //ObserverManager.getInstance().notifyObserver(“观察者请刷新信息”);
12 Intent intent = new Intent(MainActivity.this,SecondActivity.class);
13 startActivity(intent);
14 }
15 });
16
17 //注册
18 ObserverManager.getInstance().add(this);
19
20 }
21
22 @Override
23 public void observerUpData(String content) {
24 Log.d(“vvvvvvvvvvvvvvv”,“11111111111”);
25 textView.setText(content);
26 }
27 }
复制代码
复制代码
1 public class SecondActivity extends AppCompatActivity implements ObserverListener {
2 private TextView textView;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_second);
7 textView = (TextView) findViewById(R.id.tv2);
8 findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
9 @Override
10 public void onClick(View v) {
11 Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
12 startActivity(intent);
13 }
14 });
15
16 //注册
17 ObserverManager.getInstance().add(this);
18 }
19
20 @Override
21 public void observerUpData(String content) {
22 Log.d(“vvvvvvvvvvvvvvv”,“2222222222”);
23 textView.setText(content);
24 }
25 }
复制代码
复制代码
1 public class ThirdActivity extends AppCompatActivity implements ObserverListener {
2 private TextView textView;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_third);
7 textView = (TextView) findViewById(R.id.tv3);
8 findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
9 @Override
10 public void onClick(View v) {
11 ObserverManager.getInstance().notifyObserver(“观察者请刷新信息”);
12 }
13 });
14
15 //注册
16 ObserverManager.getInstance().add(this);
17 }
18
19 @Override
20 public void observerUpData(String content) {
21 Log.d(“vvvvvvvvvvvvvvv”,“33333333333”);
22 textView.setText(content);
23 }
24 }

猜你喜欢

转载自blog.csdn.net/bobby_fu/article/details/84504555