首页 > 其他分享 >单例设计模式

单例设计模式

时间:2024-04-03 23:47:16浏览次数:25  
标签:name Cat println static 单例 GirlFriend 设计模式 public

概念

  1. 静态方法和属性的使用
  2. 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
  3. 类的单例模式就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,且该类只能提供一个取得对象实例的方法。

单例模式两种方式

饿汉式

  1. 构造器私有化(防止直接实例化对象)
  2. 类的内部创建对象(对象是静态的)
  3. 向外暴露一个静态的公共方法(返回对象)
饿汉式
 public class SingleTon {
    public static void main(String[] args) {
        System.out.println(GirlFriend.num);//使用静态变量会导致类被加载
        GirlFriend instance = GirlFriend.getInstance();
        System.out.println(instance);
        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);
        System.out.println(instance == instance2);
    }
}
class GirlFriend{
    public static int num=10;
    private String name;
    

    private  static GirlFriend gf= new GirlFriend("rose");

    private  GirlFriend(String name) {
        this.name = name;
    }
    public static GirlFriend getInstance(){
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

弊端:可能造成创建对象但是没有使用;导致资源浪费

懒汉式

  1. 构造器私有化
  2. 定义一个static静态属性对象
  3. 提供一个public的static方法,可以返回一个对象
  4. 只有用户使用getInstance时才返回对象,再次调用时返回上次创建的对象 
懒汉式
 public class SingleTon {
    public static void main(String[] args) {
        System.out.println(Cat.num);// 测试是否创建对象
        Cat instance = Cat.getInstance();
        System.out.println(instance);
        Cat instance2 = Cat.getInstance();
        System.out.println(instance2);
        System.out.println(instance == instance2);

    }
}

class Cat {
    public static int num=10;
    private String name;

    private static Cat cat;

    private Cat(String name) {
        System.out.println("构造器被调用");
        this.name = name;
    }

    public static Cat getInstance() {
        if (cat == null) {
            cat = new Cat("咪咪");
        }
        return cat;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

 懒汉式与饿汉式的区别

  1.  二者主要区别在于创建对象的时机不同,饿汉式是在类加载时创建对象,懒汉式则是使用时才创建。
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
  3. 饿汉式存在浪费资源的可能。

在JavaSE标准类中java.lang.Runtime是一个经典的单例模式(饿汉式)。

 

标签:name,Cat,println,static,单例,GirlFriend,设计模式,public
From: https://www.cnblogs.com/vayenge/p/18073997

相关文章

  • 探索设计模式的魅力:AI大模型如何赋能C/S模式,开创服务新纪元
    ​......
  • 简单设计模式讲解
    设计模式是在软件开发中经常使用的最佳实践,用于解决在软件设计中经常遇到的问题。它们提供了可重用的设计,使得代码更加灵活、可维护和可扩展。下面我将为你讲解几种常见的设计模式,并提供相应的C#代码示例。 1.单例模式(SingletonPattern)确保一个类仅有一个实例,并提供一个......
  • 【设计模式】单例模式
    一、介绍单例模式是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。 二、单例模式优缺点优点:仅在首次请求单例对象时对其进行初始化你可以保证一个类只有一个实例获得了一个指向该实例的全局访问节点缺点违反了单一职责原则该模......
  • Python的四种单例模式实现方式
    ★单例模式基本介绍单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点以获取该实例。它是一种创建型模式,通常用于需要严格控制某个类的实例数量的情况。单例模式确保一个类在整个应用程序生命周期中只有一个实例,因此可以节省系统资源,同时提供了一个集中的访问......
  • 设计模式详解:适配器模式
    什么是适配器模式?在程序设计中,经常会存在一种情况:现有的程序无法直接使用,需要做适当的变换才能使用。而用于填补“现有程序”和“所需程序”之间差异的设计模式就是适配器模式(Adapter)。 不理解?没关系,跟你分享一个生活中的例子!我们在使用笔记本电脑时通常会插上电源,难道......
  • 单例模式
    publicclassSingletonObject{publicstringname{get;set;}publicSingletonObject(){name=Guid.NewGuid().ToString();}publicstaticreadonlyobjectlock_obj=newobject();publicstaticSingletonObjectsingletonObject;......
  • 设计模式之组合模式
    概念:将对象组合成树形结构以表示“部分——整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式有三个角色:抽象构件:定义公有属性和方法。叶子结点:树形结构的底层结点,没有子结点,实现抽象构件的所有操作。中间结点:叶子结点之前的结点,有子结点。组合模......
  • C#中的设计模式
    设计模式在C#和WPF日常开发中扮演着重要角色,它们提供了一套通用的解决方案,用于解决软件设计中的常见问题。以下是关于设计模式的知识点,以及可能会在面试中被问到的一些问题和答案:设计模式的知识点:创建型模式:创建型模式用于处理对象的创建过程,包括单例模式、工厂模式、抽......
  • C++单例类和线程的一个结合
    一个C++的单例类,类里面定义了一个线程对象,线程对象会定时去计算一个时间,并返回这个计算出来的时间。 应用场景:比如,有些比较消耗时间的操作,就可以放在线程里面定时计算,我们在外部定时读取。这样就可以避免主线程被阻塞。 #include<iostream>#include<thread>#incl......
  • 设计模式,装修模式,Php代码演示,优缺点,注意事项
    装饰模式(DecoratorPattern)是一种结构型设计模式,它允许动态地向一个现有对象添加新的功能或行为,而不改变其原始结构。在PHP中,可以使用类的继承和组合来实现装饰模式。下面是一个简单的PHP装饰模式示例代码:首先,定义一个基类`Component`,它代表要装饰的对象:```phpabstract......