美文网首页安卓开发程序员
常用设计模式汇总

常用设计模式汇总

作者: 非爱狂风 | 来源:发表于2019-03-01 17:29 被阅读3次

常用设计模式-单例模式

是什么

单例模式是一种常见的软件设计模式,他的核心结构中只包含一个被称为单例的特殊类,通过单例可以保证系统中,应用该模式的一个类只有一个实例,即一个类只有一个实例对象。

有什么

单例模式要求类能过有返回对象的一个引用和获取该实例的一个方法(必须是一个静态方法,一般使用getInstance这个名词命名)

怎么做

单例的实现主要是通过以下步骤:

  1. 定义一个私有的静态引用(即属性)
  2. 将类的构造方法定义为私有方法,这样其他的代码无法通过调用该类的方法来实例对象,只有通过该类提供的静态方法来得到实例
  3. 在该类提供一个静态方法,当我们调用这个方法的时候如果类持有的引用不为空就返回这个引用,如果为空就创建这个对象的实例并将实例只想改类的引用

代码实例

  1. 饿汉模式(静态常量)
public class Singleton{
    private static Singleton singleton=new Singleton();
    private  Singleton(){}
    private static Singleton getInstance(){
        return singleton;
    }
}
  1. 饿汉模式(静态代码库)
public class Singleton{
    private static Singleton singleton;
    static {
        singleton =new Singleton();
    }
    private Singleton(){}
    public static Singleton getInstance(){
        return singleton;
    }
}
  1. 懒汉模式不同步
public class Singleton{
    private static Singleton singleton;
    private Singleton(){}
    public static Singleton getInstance(){
        if(singleton ==null ){
            singleton=new Singleton();
        }
        return singleton;
    }
}
  1. 懒汉模式同步
public class Singleton{
    private static Singleton singleton;
    private Singleton(){}
    public synchronized static Singleton getInstance(){
        if(singleton == null){
            singleton=new Singleton();
        }
        return singleton;
    }
}
  1. 懒汉模式(同步)
public class Singleton{
    private static Singleton singleton;
    private Singleton(){}
    public  static Singleton getInstance(){
        if(singleton == null){
            synchronized(Singleton.class){
             singleton=new Singleton();
            }
           
        }
        return singleton;
    }
}
  1. 枚举类型
public enum Singleton{
    Instance;
    public void hello(){
        
    }
}
  1. 静态内部类
public class Singleton{
    private Singleton(){}
    private static class SingletonInstance{
        private static final Singleton INSTANCE=new Singeton();
    }
    private static Singleton getInstance(){
        return SingletonInstance.INSTANCE;
    }
}
  1. 双重检查
public class Singleton{
    private volatile static Singleton singleton;
    private Singleton(){}
    public static Singleton getInstance(){
        if(singleton == null){
            synchronized(Singleton.class){
                if(singleton == null){
                    singleton=new Singleton();
                }
            }
        }
        return singleton;
    }
}

什么时候用

  • 需要频繁的创建和销毁对象
  • 创建对象耗时过多或者耗费资源过多,但又经常用到
  • 工具类对象
  • 频繁访问数据库或者文件的对象

优缺点

  • 优点:系统中该类只存在一个对象,节省了资源,对于频繁创建或者使用的对象使用单例可以提高系统性能
  • 缺点:实例化必须通过静态方法获取而不是new;

相关文章

  • 9.设计模式

    1.说一下你熟悉的设计模式? 感谢常用的设计模式汇总,超详细![https://mp.weixin.qq.com/...

  • 常用设计模式汇总

    最近,我在看Head First设计模式。这本书写的非常棒,读的过程中总有“原来代码还可以这样设计”的感觉,对我有...

  • 常用设计模式汇总

    常用设计模式-单例模式 是什么 单例模式是一种常见的软件设计模式,他的核心结构中只包含一个被称为单例的特殊类,通过...

  • 《32个Java面试必考点》学习笔记之三------设计模式与J

    设计模式与Java语言特性知识点汇总知识点详解常用设计模式单例模式工厂模式代理模式责任链模式适配器模式观察者模式构...

  • 设计模式汇总

    23种设计模式设计模式汇总

  • Java面试题(设计模式)

    88. 说一下你熟悉的设计模式? 参考:常用的设计模式汇总,超详细! 89. 简单工厂和抽象工厂有什么区别? 简单...

  • iOS 常用设计模式汇总

    在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,下面针对iOS中,MVC模式、代理模式、观察者...

  • 常用的设计模式汇总

    单例模式 简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private...

  • 23种设计模式汇总整理

    23种设计模式汇总整理

  • Java 常用设计模式简例

    简述Java常用设计模式 简述Java常用设计模式及设计原则 strate---------策略模式针对接口编程,...

网友评论

    本文标题:常用设计模式汇总

    本文链接:https://www.haomeiwen.com/subject/smcjuqtx.html