【JAVA基础&Python】静态方法与单例模式,以及应用场景

/*
*  与Python的静态单例比较:
*                   一样是需要加上static方法才可以直接调用类里面的私有方法
*
*                   Python的类方法上 加上装饰器@staticmethod就可以不用实例化类而直接调用里面的方法
*
* */

public class SingleTon {

    public static void main(String[] args) {
        // 3 创建出两个对象
        Bank bank1 = Bank.getInstance();
        Bank bank2 = Bank.getInstance();
        // 4 内存地址是否是一样的
        System.out.println(bank1 == bank2);


        // 3 创建出两个对象
        Bank2 bank3 = Bank2.getInstance_l();
        Bank2 bank4 = Bank2.getInstance_l();
        // 4 内存地址是否是一样的
        System.out.println(bank3 == bank4);


    }
}

// A设计模式
class Bank{
    // 0 创建一个私有方法 只能在本类里面调用
    private Bank(){

    }

    // 1 创建一个类    Instance 实例化后的定义名
    private static Bank Instance = new Bank();

    // 2 上面两个private 方法不能调用   所以要创建一个公共方法来 返回对象
    public static Bank getInstance() {
            return Instance;
    }
}

B设计模式
// 这个类似于Python的  也是判断是否实例化过对象
class Bank2{
    // 0 创建一个私有方法 只能在本类里面调用
    private Bank2(){

    }

    // 1 创建一个类    定义为null  用于判断是否实例化过
    private static Bank2 Instance2 = null;

    // 2 如果实例化过就直接返回 没有创建过就实例化
    public static Bank2 getInstance_l() {
        if(Instance2 == null){
            Instance2 = new Bank2();
        }
        return Instance2;
    }
}


Python代码:
  @staticmathod   
class Dome(object):      # 这里也是先定义私有方法为None      __message = None      # 如果实例化过就直接返回 没有创建过就实例化 def __new__(cls, *args, **kwargs):        if cls.__message == None:          cls.__message = object.__new__(cls) return cls.__message
应用场景:
       1:网站的计数器,一般也是单例模式实现,否则难以同步。
     2:应用程序的日志应用,一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
     3:项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,都生成一个对象去读取。
     4:Application也是单例的典型应用
    5:Windows的Task Manager(任务管理器)就是很典型的单例模式
     6:Windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

原文地址:https://www.cnblogs.com/wanghong1994/p/14141299.html