0
点赞
收藏
分享

微信扫一扫

单例设计模式

冶炼厂小练 2022-02-18 阅读 24

单例设计模式

1.概念

1.什么是单例模式
  • 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
  • 单例模式有两种方式:
    • 饿汉式
    • 懒汉式

2.饿汉式设计模式

1.步骤
  • 构造器私有化

  • 类的内部创建对象

  • 向外暴露一个静态的公用方法 getInstance()

  • 饿汉式可以造成创建对象没有被使用

    public class SinleTon {
        public static void main(String[] args) {
            GirlFriend girlFriend = GirlFriend.getInstance();
            System.out.println(girlFriend.toString());// 小婉
            //  类的加载,静态变量初始化,只会执行一次
            System.out.println(GirlFriend.getInstance() == (GirlFriend.getInstance()));// true
        }
    }
    class GirlFriend{
        private String name;
        //2.在类的内部直接创建
        private static GirlFriend gf = new GirlFriend("小婉");
        //1.构造器私有化
        private GirlFriend(String name) {
            this.name = name;
        }
        //3.提供一个公共的static方法  返回gf对象
        public static GirlFriend getInstance(){
            return gf;
        }
    
        @Override
        public String toString() {
            return "GirlFriend{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    

3.懒汉式设计模式

1.步骤
  • 构造器私有化

  • 类的内部创建对象

  • 向外暴露一个静态的公用方法 getInstance()

    public class SingleTon {
        public static void main(String[] args) {
            System.out.println(Cat.getInstance().toString());//喵喵
            //懒汉式,只有当用户调用时才会创建;用户再次调用时,直接返回之前创建的
            System.out.println(Cat.getInstance() == Cat.getInstance()); //true
        }
    }
    class Cat{
        private String name;
        private static Cat cat;
    
        public Cat(String name) {
            this.name = name;
        }
        public static Cat getInstance(){
            if (cat == null){
                cat = new Cat("喵喵");
            }
            return cat;
        }
    
        @Override
        public String toString() {
            return "Cat{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    

    4.饿汉式与懒汉式模式

    • 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用是才创建
    • 饿汉式不存在线程安问题,懒汉式存在线程安全问题
    • 饿汉式存在浪费资源的可能,如果程序员一个对象实例都没使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题
举报

相关推荐

0 条评论