单例模式记录

本文为学习记录

####单例模式:
定义:所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。

举例:比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

应用:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session 工厂等)。

单例模式思考:

  • 为什么需要单例模式?
    为了解决资源访问冲突。全局唯一类。
  • 单例模式模式有哪些缺点
    对oop的特性支持不友好,不支持有参数的构造函数。
  • 如何设计一个集群模式下单例模式?
    可以采用对象序列化到磁盘中,每次获取对象都从磁盘中优先加载。

代码:

public class XmlPaseTest {

    //饿汉式-静态常量
//    private  static final  XmlPaseTest xmlPaseTest=new XmlPaseTest();
//
//    private  XmlPaseTest(){
//
//    }
//    public static XmlPaseTest getInstance(){
//        return xmlPaseTest;
//    }

    //饿汉式-静态代码块
//    private  static   XmlPaseTest xmlPaseTest;
//
//    private  XmlPaseTest(){
//
//    }
//    static {
//        xmlPaseTest=new XmlPaseTest();
//    }
//        public static XmlPaseTest getInstance(){
//        return xmlPaseTest;
//    }

    //懒汉式,线程不安全

//    private  XmlPaseTest(){
//
//    }
//    private  static  XmlPaseTest xmlPaseTest=null;
//
//    public static XmlPaseTest getInstance(){
//        if (xmlPaseTest==null){
//            xmlPaseTest = new XmlPaseTest();
//        }
//
//        return xmlPaseTest;
//    }


    //懒汉式,同步方法
//    private  XmlPaseTest(){
//
//    }
//    private  static  XmlPaseTest xmlPaseTest=null;
//
//    public static synchronized XmlPaseTest getInstance(){
//        if (xmlPaseTest==null){
//            xmlPaseTest = new XmlPaseTest();
//        }
//
//        return xmlPaseTest;
//    }


      //懒汉式,双端锁
//    private  static volatile XmlPaseTest xmlPaseTest;
//
//    private  XmlPaseTest(){
//
//    }
//
//    public static XmlPaseTest getInstance(){
//        if (xmlPaseTest==null){
//            synchronized (xmlPaseTest.getClass()){
//                if (xmlPaseTest==null) {
//                    xmlPaseTest = new XmlPaseTest();
//                }
//            }
//        }
//        return xmlPaseTest;
//    }




//    //懒汉式 静态内部类
//    private  XmlPaseTest(){
//
//    }
//    private static class  PaseTest{
//        private  static final  XmlPaseTest xmlPaseTest =new XmlPaseTest();
//    }
//    public static XmlPaseTest getInstance(){
//        return PaseTest.xmlPaseTest;
//    }

    // 枚举模式
    enum  PaseTest{
        PASTEST;
        private PaseTest(){

        }
        public PaseTest getInstance(){
            return PASTEST;
        }

    }


    public static void main(String[] args) {

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
命令模式和单例模式是两种常见的设计模式,它们在软件工程中都有各自的作用。 **命令模式(Command Pattern)**: 命令模式是一种行为设计模式,它封装了请求并使其能被延迟执行。这个模式涉及三个角色: - **抽象命令(Command)**:定义了请求的一般接口,包含了执行请求的方法。 - **具体命令(Concrete Command)**:实现了抽象命令,负责具体的执行操作。 - **客户端(Invoker)**:调用命令,不需要关心命令的内部实现。 结合命令模式,你可以创建一组命令对象,每个命令代表一个特定的操作,而客户端通过单例模式获取唯一的命令管理器,从而能够安全、统一地发送和控制这些命令的执行。 **单例模式(Singleton Pattern)**: 单例模式确保了一个类只有一个实例,并提供一个全局访问点。这在资源有限或者需要全局访问点的场景非常有用,比如数据库连接、日志记录等。 当命令模式和单例模式结合时,可能会这样应用: - 创建一个单例的命令管理器,它负责存储所有的命令对象。 - 当客户端需要执行一个操作时,通过这个单例获取命令实例,而不是每次都去创建一个新的。 - 单例模式保证了在整个应用程序生命周期内,命令管理器始终保持唯一,避免了多个实例可能导致的问题。 相关问题: 1. 在什么情况下会考虑使用命令模式和单例模式的结合? 2. 如何确保命令管理器是单例并且在多线程环境下的安全性? 3. 命令模式和工厂模式有什么区别,它们如何共同应用于系统设计?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值