zoukankan      html  css  js  c++  java
  • JAVA 设计模式—单例模式

    JAVA中的单例模式是一种广泛使用的设计模式,是Java里23种设计模式之一。单例模式的作用是保证在JAVA程序中,某个类只有一个程序存在。

    这里简单介绍其两种基本写法:饿汉式和懒汉式。

    饿汉式与懒汉式区别在于饿汉式在类加载时就对实例进行创建,优点是线程安全,缺点是不管用不用都占用内存;懒汉式是单例在需要的时候采取创建的,如果单例已经创建,再次调用将不会创建新的对象,而是直接返回之前创建的对象,优点是占用内存小,缺点是加载速度慢,线程不够安全;

    这里以车举例,同时定义一个成员变量司机来证实唯一性。

    饿汉式

    public class Car {  //创建车类
        private String driver;  //定义成员变量司机名
        private static Car car = new Car()  //直接在初始化成员变量时实例化一辆车;
        private Car() {  //为保证车的唯一,将构造方法设为私有的,这样类外面就无法使用new Car()来实例化一辆车了;
            
        }
        public static Car getCar() {  //定义一个公开的成员方法,用来获取这辆车;
            
            return car;
        }
        public String getDriver() {
            return driver;
        }
        public void setDriver(String driver) {
            this.driver = driver;
        }
    }

    懒汉式

    public class Car {  
        private String driver;  
        private static Car car;  //定义成员变量车,其类型是类本身;默认为null
        private Car() {  
            
        }
        public static Car getCar() {  
            if (car == null) {  //当这辆车指向为null时,实例化一辆车,如果不是null,返回这辆车;
                car = new Car();
            }
            return car;
        }
        public String getDriver() {
            return driver;
        }
        public void setDriver(String driver) {
            this.driver = driver;
        }
    }

    测试

    public class Test{
        public static void main(String[] args) {
            
            Car car1 = Car.getCar();  //直接用类名调用静态方法获取一辆车;对象名为car1
            Car car2 = Car.getCar();  //再次调用方法获取一辆车;对象名为car2
            car1.setDriver("小明");  //将car1的司机命名为小明
            System.out.println(car2.getDriver());  //打印car2的司机名仍然是小明,说明这两辆车是同一辆车,也就证明了这辆车的唯一性。
                
        }    
            
    }
  • 相关阅读:
    临时表各方式对比
    【译】表变量和临时表的比较(转)
    delete和truncate的一个严重区别
    各种临时表插入数据方式对比(包括自增列和GUID列)
    纤程模式的问题
    转 javascript针对DOM的应用(四)
    转 CSS兼容性(IE和Firefox)技巧大全 (四)
    转 CSS兼容性(IE和Firefox)技巧大全 (五)
    转 javascript针对DOM的应用(三)
    javascript基础知识大全(1)
  • 原文地址:https://www.cnblogs.com/wyc1991/p/9021732.html
Copyright © 2011-2022 走看看