首页 > 系统 > Android > 正文

详解Android设计模式

2020-02-21 17:25:26
字体:
来源:转载
供稿:网友

我们在开发Android过程的时候,往往不是完成开发困难,而是使应用系统在后续的升级和维护中有不同的改变,下面武林技术频道小编给大家分享详解Android设计模式吧!

单例模式

一个类只有一个实例,并且可以全局访问使用

应用场景

如账户管理类,数据库操作类等(某个对象频繁被访问使用)

常用方式

饿汉式
懒汉式
同步加锁
DCL双重加锁验证
静态内部类
枚举单例
饿汉式

加载类的同时立即进行初始化操作,对资源消耗很大

public class SingleTest {  public static final SingleTest singleTest1=new SingleTest();  public SingleTest() {  }  public static SingleTest getSingleTest1(){    return singleTest1;  }}

懒汉式

优点:需要使用时候才进行初始化加载

缺点:线程不安全,在多线程中很容易出现不同步的情况

public class SingleTest1 {  private static SingleTest1 instance=null;  public SingleTest1() {  }  public static SingleTest1 getInstance(){    if(instance==null){      instance=new SingleTest1();    }    return instance;  }}

同步加锁

优点:解决线程安全问题

缺点:每次实例需要判断加锁状态,效率低下

public class SingleTest2 {  private static SingleTest2 instance=null;  public SingleTest2() {  }  public static synchronized SingleTest2 getInstance(){    if(instance==null){      instance=new SingleTest2();    }    return instance;  }}

DCL双重校验

优点:并发不高的情况下可以完美运行(推荐使用,客户端几乎不存在高并发情况)

缺点:JDK1.5以前可能会出现instance为初始化的问题(现在的Android几乎都是1.7 1.8了几乎可以略率此问题)

public class SingleTest4 {  private static SingleTest4 instance=null;//静态变量  public SingleTest4() {  }  public static SingleTest4 getInstance(){    if (instance == null) {//第一层校验      synchronized (SingleTest4.class) {        if (instance == null) {//第二层校验          instance = new SingleTest4();        }      }    }    return instance;  }}

静态内部类

优点:延迟加载,线程安全,内存消耗少(推荐使用)

public class SingleTest5 {  private SingleTest5() {  }  public static final SingleTest5 getInstance() {    return SingletonHolder.INSTANCE;  }  //定义的静态内部类  private static class SingletonHolder {    private static final SingleTest5 INSTANCE = new SingleTest5(); //创建实例的地方  }}

枚举单例

优点:线程安全,防反序列化,防反射,写法简单

public enum SingleTest6 {  //第一种方式//  INSTANCE;//  private CaiPiao instance;////  SingleTest6() {//    instance = new CaiPiao();//  }////  public CaiPiao getInstance() {//    return instance;//  }////  class CaiPiao {////  }//第二种方式  INSTANCE2{    @Override    protected void CaiPiao() {      System.out.println("彩票");    }  };  protected abstract void CaiPiao();}

github代码地址

关于详解Android设计模式今天武林技术频道小编就介绍到这里了,希望这篇文章对您有所帮助。如果您还有什么不明白的地方可以关注js.Vevb.com,我们会尽快为您解答。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表