zoukankan      html  css  js  c++  java
  • Java基础之:单例模式

    Java基础之:单例模式

    设计模式

    设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

    单例模式

    对于一个类而言,外部只能获取其一个实例。

    实现步骤:

    1) 构造器私有化

    2) 类的内部创建对象

    3) 向外暴露一个静态的公共方法。getDog,getCat。

    简单案例

    package codeBlock;
    ​
    public class Singleton {
    ​
        public static void main(String[] args) {
            
            Dog dog1 = Dog.getDog();
            Dog dog2 = Dog.getDog();
            System.out.println(dog1.getName()); //旺财
            System.out.println(dog2.getName()); //旺财
            System.out.println(dog2 == dog1);   //true
            
            
            Cat cat1 = Cat.getCat();
            Cat cat2 = Cat.getCat();
            System.out.println(cat1.getName());  //布偶
            System.out.println(cat2.getName());  //布偶
            System.out.println(cat2 == cat1);  //true
        }
    ​
    }
    ​
    //饿汉模式:声明一个对象,将其初始化并作为一个静态属性,在外部需要此类对象时,直接返回此对象。
    class Dog{
        private String name;
        private static Dog dog = new Dog("旺财");  //静态属性,所以只有一个dog
        
        private Dog(String name) {
            this.name = name;
        }
        
        public static Dog getDog() {
            return dog;
        }
        
        public String getName() {
            return name;
        }
    ​
        public void setName(String name) {
            this.name = name;
        }
        
    }
    ​
    //懒汉模式:声明一个对象,并作为一个静态属性,在外部需要此类对象时将其初始化,再返回此对象。
    class Cat{
        private String name;
        private static Cat cat ;    //静态属性,所以只有一个cat
        
        private Cat(String name) {
            this.name = name;
        }
        
        public static Cat getCat() {
            if(cat == null) {
                cat = new Cat("布偶");
            }
            return cat;
        }
        
        public String getName() {
            return name;
        }
    ​
        public void setName(String name) {
            this.name = name;
        }
        
    }
    

    饿汉模式与懒汉模式

    1. 二者最不同的点在于对象声明的时机。饿汉模式是在类加载时,就声明并初始化一个对象作为静态变量,而懒汉模式是在类加载时声明一个静态属性,在外部需要实例时再创建对象。

    2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。

    3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。

    4. java.lang.Runtime就是经典的单例模式。

  • 相关阅读:
    多任务拷贝小案例
    进程池
    进程间的通信
    互斥锁
    创建函数/类的线程
    udp/tcp流程
    发布模块
    私有属性/方法的访问
    深入了解jQuery之整体架构
    (转)前端面试题
  • 原文地址:https://www.cnblogs.com/SongHai/p/14128829.html
Copyright © 2011-2022 走看看