• 深入理解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,并假使只剩下十张票。

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

  • 相关阅读:
    Java 重载机制
    网关、DNS、子网掩码、MAC地址、路由器、猫
    前台?后台?前端?后端?
    JSP初学
    PS笔记
    Pandorabox等类OpenWrt的路由器 实现后端设备接入IPV6(中继代理+NAT)
    三星S5_G9008V 解锁联通4G(安卓6.0)
    一个意外的发现
    硬改路由器-MW310R-AR9341篇
    关于使用硬改的路由器的各种经历
  • 原文地址:https://www.cnblogs.com/yxnchinahlj/p/1836084.html
Copyright © 2020-2023  润新知