首页 > 其他分享 >设计模式(二)

设计模式(二)

时间:2024-10-12 23:11:29浏览次数:6  
标签:Singleton 对象 创建 singleton 单例 设计模式

第一类模式:创建者模式

  创建型模式的主要关注点是“怎么样创建对象?”,它的主要关注点是“将对象的创建与使用分离”。

  这样可以降低系统的耦合度,使用者不需要关注 对象的创建细节。

创建型模式分为:

  单例模式

  工厂方法模式

  抽象工程模式

  原型模式

  建造者模式

单例设计模式

  单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

单例模式的结构

单例模式主要有以下角色:

  单例类。只能创建一个实例的类

  访问类。使用单例类

单例模式的实现

单例设计模式分类两种:

  饿汉式:类加载就会导致该单实例对象被创建

  懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建

饿汉式-方式1(静态成员变量)

 1 package com.itheima.pattern.singleton.demo1;
 2 
 3 /**
 4  * 创建者模式-单例设计模式
 5  * 饿汉式:静态成员变量
 6  */
 7 public class Singleton {
 8 
 9     // 1、私有构造方法
10     private Singleton() {}
11 
12     // 2、在本类中创建本类对象
13     private static Singleton singleton = new Singleton();
14 
15     // 3、提供一个公共的访问方式,让外界获取该对象
16     public static Singleton getInstance() {
17         return singleton;
18     }
19 }
 1 package com.itheima.pattern.singleton.demo1;
 2 
 3 /**
 4  * 创建者模式-单例设计模式
 5  * 饿汉式:静态成员变量
 6  */
 7 public class Client {
 8     public static void main(String[] args) {
 9         // 创建Singleton类对象
10         Singleton singleton1 = Singleton.getInstance();
11         Singleton singleton2 = Singleton.getInstance();
12         // 判断获取到的两个对象是否是同一个对象
13         System.out.println(singleton1 == singleton2);
14     }
15 }

该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的对象singleton。singleton对象是随着类的加载而创建的。如果该对象足够大的话,而一直没有使用就会造成内存的浪费。

饿汉式-方式2(静态代码块方式)

 1 package com.itheima.pattern.singleton.demo2;
 2 
 3 /**
 4  * 创建者模式-单例设计模式
 5  * 饿汉式:静态代码块
 6  */
 7 public class Singleton {
 8 
 9     // 1、私有构造方法
10     private Singleton() {}
11 
12     // 2、声明Singleton类型的变量
13     private static Singleton singleton;
14 
15     // 3、在静态代码块中进行赋值
16     static {
17         singleton = new Singleton();
18     }
19 
20     // 4、提供一个公共的访问方式,让外界获取该对象
21     public static Singleton getInstance() {
22         return singleton;
23     }
24 }
 1 package com.itheima.pattern.singleton.demo2;
 2 
 3 /**
 4  * 创建者模式-单例设计模式
 5  * 饿汉式:静态代码块
 6  * 测试类
 7  */
 8 public class Client {
 9     public static void main(String[] args) {
10         // 创建Singleton类对象
11         Singleton singleton1 = Singleton.getInstance();
12         Singleton singleton2 = Singleton.getInstance();
13         // 判断获取到的两个对象是否是同一个对象
14         System.out.println(singleton1 == singleton2);
15     }
16 }

该方式在成员位置声明Singleton类型的静态变量,而对象的创建是在静态代码块中,也是随着类的加载而创建。所以和饿汉式的方式1基本一样,当然该方式也存在内存浪费问题。

标签:Singleton,对象,创建,singleton,单例,设计模式
From: https://www.cnblogs.com/record-100/p/18461655

相关文章

  • C#设计模式详解:从简单工厂到抽象工厂
    在C#中,简单工厂(SimpleFactory)和抽象工厂(AbstractFactory)是两种常用的设计模式,它们都属于创建型设计模式,用于创建对象而无需在代码中显式指定具体的类。尽管它们的目的相似,但在复杂性和灵活性方面存在显著差异。简单工厂(SimpleFactory)简单工厂模式是一种不属于GoF(四人帮......
  • 设计模式11
    packagecom.example.principle.ocp;publicclassApiInfo{privateStringapi;privatelongrequestCount;privatelongerrorCount;privatelongdurationOfSeconds;//privatelongtimeoutCount;publicStringgetApi(){r......
  • 设计模式详解(命令模式)
    命令模式(CommandPattern)是一种行为型设计模式,它将请求封装为一个对象,从而使得请求的发送者和接收者解耦。一、命令模式的核心思想命令模式的核心思想是将“请求”封装成为一个对象,从而使得我们可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的......
  • 设计模式
    重点:单例模式、工厂方法模式、建造者模式、适配器模式(类/对象)、代理模式、装饰器模式、迭代器模式、模板方法模式、策略模式、责任链模式、观察者模式1、设计模式的分类创建型模式用于描述“怎么样创建对象”,它的主要特征是“将对象的创建与使用分离”。GOF书中提到了单例......
  • 前端开发设计模式——组合模式
    目录一、组合模式的定义和特点1.定义2.特点:二、组合模式的实现方式1.定义抽象组件类2.创建叶节点类3.创建组合类:三、组合模式的应用场景1.界面布局管理2.菜单系统构建3.组件库开发四、组合模式的优点1.简化客户端代码2.增强代码的可拓展性3.清晰的层次结构表示......
  • 重修设计模式-行为型-观察者模式
    重修设计模式-行为型-观察者模式Defineaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically.在对象之间订阅一个一对多的依赖,当一个对象状态改变时,它的所有依赖对象都会自动......
  • C++常用设计模式详解
    前言:本文详细解释几种常用的C++设计模式,都是平时项目中用的比较多的。本文针对每种设计模式都给出了示例,让你跟着代码彻底搞懂设计模式。Tips:如果是准备面试,不需要知道所有的设计模式,要深入理解下面几种常用即可,因为面试官会先问你了解哪些设计模式,然后从你了解的里面挑一......
  • php设计模式(二)结构
    适配器模式(Adapter):结合两个不兼容的接口。GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作<?phpclassmessage{publicfunctionsend(){echo'faxiaoix';}publicfunctio......
  • php设计模式(一)创建
    1、创建单例模式:确保一个类只有一个实例,并提供一个全局访问点。使用static静态变量和静态类工厂模式:主要是把工厂抽象出来一个抽象类,子类继承,通过子类构建,调用抽象工厂模式:抽象工厂模式的核心就是共创抽象类不止一个子类的构建,比如,我要发消息,还要推送一条消息,创建两个子类的......
  • 带你深入浅出设计模式:十二、桥接模式:连接抽象与实现的桥梁
    此为设计模式第十二谈!用总-分-总的结构和生活化的例子给你讲解设计模式!码农不易,各位学者学到东西请点赞收藏支持支持!开始部分:总:桥接模式的本质是将抽象部分与它的实现部分分离,使它们都能独立地变化。分:1.老规矩,自行打开VS创建一个控制台应用程序2.实现编码,这里以汽车......