【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; } }
# 单例2
public class Single { // 初始化函数 private Single(){}; // 自己给自己NEW一个静态对象 private static Single S = new Single(); // 给外部开放 公用的 1个访问接口 public static Single getInstance(){ return S; // 这里返回的是上面NEW的静态对象 }; // 单例测试方法 public void Print(){ System.out.printf("单例模式的方法"); }; public static void main(String[] args) { // 访问单例 Single S = new Single(); // 使用测试 S.Print(); } }
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(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
Python全栈(后端、数据分析、脚本、爬虫、EXE客户端) / 前端(WEB,移动,H5) / Linux / SpringBoot / 机器学习