画图个人学习安卓开发

设计模式

2020-03-15  本文已影响0人  与搬砖有关的日子

1、设计模式分类 参考

创建型(5种):将对象的创建与使用分离,使用者不需要关注对象的创建细节

结构型(7种):描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。

行为型(11种):分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为

迭代器模式结构图

2、单例模式

2.1懒汉式

线程不安全,延迟初始化,严格意义上不是不是单例模式

public class Singleton {  
     //静态私有成员变量
    private static Singleton instance; 

    //私有构造函数,确保用户无法通过new关键字直接实例化它
    private Singleton (){}  

    //静态公有工厂方法,返回唯一实例
    public static Singleton getInstance() {  
    if (instance == null) {  
        instance = new Singleton();  
    }  
    return instance;  
    }  
}

2.2饿汉式

线程安全,比较常用,但容易产生垃圾,因为一开始就初始化

public class Singleton {  

    private static Singleton instance = new Singleton();  

    private Singleton (){}  

    public static Singleton getInstance() {  
        return instance;  
    }  
}

2.3双重锁式

线程安全,延迟初始化。这种方式采用双锁机制,安全且在多线程情况下能保持高性能

public class Singleton {  
    private volatile static Singleton singleton;  

    private Singleton (){}  

    public static Singleton getSingleton() {  
        if (singleton == null) {  
            synchronized (Singleton.class) {  
                if (singleton == null) {  
                    singleton = new Singleton();  
                }  
           }  
      }  
      return singleton;  
    }  
}

双重检查模式,进行了两次的判断,第一次是为了避免不要的实例,第二次是为了进行同步,避免多线程问题。由于singleton=new Singleton()对象的创建在JVM中可能会进行重排序,在多线程访问下存在风险,使用volatile修饰signleton实例变量有效,解决该问题。

2.4静态内部类

public class Singleton { 
    private Singleton(){
    }
      public static Singleton getInstance(){  
        return Inner.instance;  
    }  
    private static class Inner {  
        private static final Singleton instance = new Singleton();  
    }  
} 

只有第一次调用getInstance方法时,虚拟机才加载 Inner 并初始化instance ,只有一个线程可以获得对象的初始化锁,其他线程无法进行初始化,保证对象的唯一性。

2.5枚举

public enum Singleton  {
    INSTANCE 
 
    //doSomething 该实例支持的行为
      
    //可以省略此方法,通过Singleton.INSTANCE进行操作
    public static Singleton get Instance() {
        return Singleton.INSTANCE;
    }
}
上一篇下一篇

猜你喜欢

热点阅读