zoukankan      html  css  js  c++  java
  • 深入理解Java的单例模式

    下面是一个单例模式的实现
    public class Station {
       
        private static Station st=new Station();
        private int num=10;
        private Station(){
           
        }
       
        public static Station getInstance(){
            return st;
        }
       
        public void sell(){
            if (st.num>0) {
                num--;
                System.out.println("有票");
            }else {
                System.out.println("票卖没了");
            }
        }
    }


    public class Demo {

        public static void main(String[] args) {

            Station st=Station.getInstance();
            for (int i = 20; i >0; i--) {
                System.out.print(i+"\t");
                Station.getInstance().sell();
            }
           
        }
    }

      单例模式可以理解为是面向对象语言中对全局变量的一种实现,当然的作用不仅仅限于此。我们可以对单例模式实现的过程中的思路进行一下剖析,如此更加清楚的认识到设计模式究竟是什么,当然也可以证明一下基础知识的重要性(基础才是王道)。

      首先我们分析一下单例的意义,在Java中为一个类只能有一个实例化对象。这显然不是我们平常所写的一个普通类所能够做到的事情。那么为了实现这一个要求该如何去做呢。实例化是一个类的初始化时候的问题,而初始化是构造方法去做的事情(当然这里面jvm也帮我们做了很多的事情)。构造方法,我们要设为私有。这样我们让该类不能被随意的初始化,那该在哪初始化,而它有怎样被调用呢。

      一个不能初始化的类,也就是说不能够被实例化的类,我们想要调用。那么无疑让我们想到了static关键字,一个public static 的方法可以实现我们这个要求——即在不实例化类的情况下能够调用其中的方法。于是我们写下了一个public static 的方法,用于得到这个类的唯一实例。而这个实例我们是在类的内部实例,并同样定义为 static 的变量(一直用static 只是为了能够不实例化便可以使用。因为static可以在类初始化的时候便生成了,对于此不理解的同学们可以查看我的前一篇博客。。。)。到这里我们一个单例模式的实现框架其实已经搭好了。

      本文中的例子,sell()方法的使用是为了解决一个具体问题,我在单例框架下扩展而得到的。该例子的背景是有一个售票点,我们要知道自己买票的时候是否能够买到票。显然这是一个可以用单例模式解决的问题。因为全局只能有一个记录票数的变量,因此我们不能够造出多个实例,那样便失去了原有的意义。于是,我们在此加上了机票数的变量num,并假使只剩下十张票。

      然后,我们设立一个售票的方法,如果有票卖便打印出有票同时票的数量减一,否则打印出票卖没了。(简单的判断语句)

  • 相关阅读:
    工作经常使用的SQL整理,实战篇(二)
    工作经常使用的SQL整理,实战篇(一)
    socket编程实例
    C# Socket编程笔记
    SQL Server中的事务与锁
    存储过程学习笔记(SQL数据库
    SQL Server 查询性能优化——创建索引原则(二)
    SQL Server 查询性能优化——创建索引原则(一)(转载)
    PSR-4——新鲜出炉的PHP规范
    PHPUNIT 单元测试
  • 原文地址:https://www.cnblogs.com/yxnchinahlj/p/1836084.html
Copyright © 2011-2022 走看看