码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA 设计模式—单例模式

时间:2018-05-10 23:38:37      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:模式   简单介绍   return   nbsp   初始化   bsp   void   单例模式   实例   

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的司机名仍然是小明,说明这两辆车是同一辆车,也就证明了这辆车的唯一性。
            
    }    
        
}

 

JAVA 设计模式—单例模式

标签:模式   简单介绍   return   nbsp   初始化   bsp   void   单例模式   实例   

原文地址:https://www.cnblogs.com/wyc1991/p/9021732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!