设计模式入门——单例模式

单例模式

什么是单例模式?

单例模式顾名思义就是整个类中有且仅有一个的实例对象。

单例模式的三个要点:

  • 有且仅有一个私有实例
  • 构造方法是私有的,以保证不会被多次创建
  • 提供一个访问单例对象的公有静态方法

单例模式分很多种,常见的有饿汉模式、懒汉模式、静态内部类单例模式和双重锁模式…


饿汉模式

饿汉模式,这个比喻可以理解成人饥饿的时候立马就想要吃东西,放到代码里,可以说想要获取一个对象的时候立马就可以得到。饿汉模式中的Singleton对象作为静态成员变量,它在类加载时就已经初始化了,所以想要使用此对象的时候可以立即获取。

代码示例:

public class Singleton{
   
    //1.静态成员:有且仅有一个实例
    private static Singleton singleton = new Singleton();
    //2.私有的构造方法
    private Singleton(){
   };
    //3.获取单例对象的静态方法
   	public static Singleton getInstance(){
   
        return singleton;
    }
}

饿汉模式的特点:

  • 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如网站首页页面缓存)。
  • 避免对资源的多重占用(比如写文件操作)。
  • 线程安全。
  • 可能造成资源的浪费,类初始化的时候已经创建单例对象实例了,但是它可能不会被使用到。(使用静态内部类单例模式懒汉式可以解决)

静态内部类单例模式

对饿汉模式进行改进,由于饿汉模式的单例对象初始化不能延迟到它真正被使用的时候,那就想个办法来延迟初始化,静态内部类就可以做到这一点。

代码示例:

public class Singleton{
   
    //静态内部类
    public static class Inner
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式除了单例模式,还有很多其他常见的设计模式,例如: 1. 工厂模式(Factory Pattern):用于创建对象的模式,根据不同的条件返回不同的对象实例。 2. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 3. 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 4. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使得原本不兼容的类可以一起工作。 5. 策略模式(Strategy Pattern):定义了一系列的算法,并将每个算法封装起来,使它们可以互相替换,使得算法可以独立于使用它的客户而变化。 6. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。 7. 模板方法模式(Template Method Pattern):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 8. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 9. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,使得这个子系统更加容易使用。 10. 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值