zoukankan      html  css  js  c++  java
  • Java学习笔记(二十四):单例设计模式singleton

    为什么要使用singleton设计模式?

    假设设计了一个操作数组的工具类(Tools),里面有一个锤子的方法(Hammer),如果不使用singleton设计模式,每次想调用Hammer方法都需要new一个Tools类出来

     1 class Tools{
     2     //锤子
     3     public void Hammer(){
     4         System.out.println("使用锤子");
     5     }
     6 }
     7  
     8 public class ToolsDemo {
     9     public static void main(String[] args){
    10     //需要使用锤子
    11     new Tools().Hammer();
    12     //需要使用锤子
    13     new Tools().Hammer();
    14     //需要使用锤子
    15     new Tools().Hammer();
    16     }
    17 }    

    运行结果

    使用锤子
    使用锤子
    使用锤子

    这样很浪费内存资源,就像一个班级的人吃核桃需要用锤子砸,没必要为每个学生买一个锤子,只需买一个锤子,谁要吃核桃谁就去用锤子,大大节省了成本。

    于是就引出了singleton单例设计模式,只需要在内存中生成一次,以后想用只需调用这块内存即可,没必要每次都要重新在堆中new一个Tools类

     1 class Tools{
     2     //(1):必须在该类中,自己先创建出一个静态对象
     3     private static Tools instance = new Tools();
     4     //(2):私有化自身的构造器,防止外界通过构造器创建新的对象
     5     private Tools(){}
     6     //(3):额外暴露一个公共的静态方法用于获取自身的对象
     7     public static Tools getInstance() {
     8         return instance;
     9     }
    10 
    11     //锤子
    12     public void Hammer(){
    13         System.out.println("使用锤子");
    14     }
    15 }
    16 
    17 public class ToolsDemo {
    18     public static void main(String[] args){
    19         //需要使用锤子
    20         Tools.getInstance().Hammer();
    21         //需要使用锤子
    22         Tools.getInstance().Hammer();
    23         //需要使用锤子
    24         Tools.getInstance().Hammer();
    25     }
    26 }

    运行结果

    使用锤子
    使用锤子
    使用锤子
  • 相关阅读:
    在PHP中如何获取来源URL
    函数中的static关键字
    ubuntu server 10.04 上安装oracle 10G 开发版
    ajax同步和异步提交的区别
    jQuery对Select的操作集合[终结篇]
    从IFARME中直接跳转到外层页面
    用mount命令挂载远程文件系统
    js小技巧(输入框提示信息自动消失)
    js 获取事件源
    Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
  • 原文地址:https://www.cnblogs.com/zylq-blog/p/7782905.html
Copyright © 2011-2022 走看看