简谈设计模式——单例设计模式 和 抽象工厂模式

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 单例设计模式 和 抽象工厂模式 单例模式双重检查锁定public class Singleton5{ private static Singleton5 _instance; private static readonly object SyncObject = new object(); private Singleton5() { } public static...

单例设计模式 和 抽象工厂模式

单例模式

  • 双重检查锁定

    public class Singleton5
    {
         
         
      private static Singleton5 _instance;
      private static readonly object SyncObject = new object();
    
      private Singleton5() {
         
          }
    
      public static Singleton5 Instance()
      {
         
         
          if (_instance==null)
          {
         
         
              lock (SyncObject)
              {
         
         
                  if (_instance == null)
                  {
         
         
                      _instance = new Singleton5();
                  }
              }
          }
          return _instance;
      }
    }
    

    适用:单/多线程
    模式:双重检查锁定(Double-Check Locking)(线程安全)[推荐]
    优点:线程安全;延迟加载;效率较高(只会实例化一次,首先会判断是否实例化过,如果实例化了,直接返回实例,不需要进入lock;如果未实例化,进入lock,就算是多个调用也无妨,第一次调用的会实例化,第二个进入lock时会再次判断是否实例化,这样线程就不会阻塞了。)
    缺点:基本没有

  • 静态内部类

    public class Singleton6
    {
         
         
      private Singleton6() {
         
          }
    
      private static class SingletonInstance
      {
         
         
          public static Singleton6 Instance = new Singleton6();
      }
    
      public static Singleton6 Instance()
      {
         
         
          return SingletonInstance.Instance;
      }
    }
    

    适用:单/多线程
    模式:静态内部类(线程安全)[推荐]
    优点:避免了线程不安全;延迟加载;效率高(这种方式跟饿汉式方式采用的机制类似:都是采用了类装载的机制来保证初始化实例时只有一个线程。不同的地方是:饿汉式只要Singleton类被装载就会实例化,没有Lazy-Loading的作用;而静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用Instance方法,才会装载SingletonInstance类,从而完成Singleton的实例化。)
    缺点:基本没有

工厂模式

.NET简谈设计模式之(抽象工厂模式)

简单工厂

  • 简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)
  • 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。

image.png

Product 抽象类,定义各个具体产品的公共接口
ProductA 产品类,继承抽象产品类,实现抽象方法
ProductB,ProductC同A
ProductFatory 定义静态方法,根据所需产品不同返回对应产品。

抽象工厂

抽象工厂:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象

byte[] 数组和其他类型转换

        private T BytesToT<T>(byte[] bytes)
        {
   
   
            using (var ms = new MemoryStream())
            {
   
   
                ms.Write(bytes, 0, bytes.Length);
                var bf = new BinaryFormatter();
                ms.Position = 0;
                var x = bf.Deserialize(ms);
                return (T)x;
            }
        }

        private byte[] TToBytes<T>(T obj)
        {
   
   
            var bf = new BinaryFormatter();
            using (var ms = new MemoryStream())
            {
   
   
                bf.Serialize(ms, obj);
                var r = ms.ToArray();
                if (BitConverter.IsLittleEndian)
                    Array.Reverse(r);
                return r;
            }
        }
目录
相关文章
|
2月前
|
设计模式
「全网最细 + 实战源码案例」设计模式——抽象工厂模式
抽象工厂模式是一种创建型设计模式,提供接口用于创建一系列相关或依赖的对象,无需指定具体类。它解决了产品族问题,管理和创建一组相关产品。结构上包括抽象工厂、具体工厂、抽象产品和具体产品。适用于创建相关对象、产品族固定但种类变化的场景。优点是分离接口与实现、管理产品族方便且扩展性好;缺点是产品族扩展困难且代码复杂度增加。通过配置文件和反射机制可进一步改进,使系统更灵活易扩展。
74 17
|
2月前
|
设计模式 缓存 安全
「全网最细 + 实战源码案例」设计模式——单例设计模式
单例模式是一种创建型设计模式,确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。它常用于控制共享资源的访问,如数据库连接、配置管理等。实现方式包括饿汉式(类加载时初始化)、懒汉式(延迟加载)、双重检查锁、静态内部类和枚举单例等。其中,枚举单例最简单且安全,能有效防止反射和序列化破坏。
45 7
|
4月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
64 2
|
6月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
6月前
|
设计模式 存储 安全
设计模式——设计模式介绍和单例设计模式
饿汉式(静态常量)、饿汉式(静态代码块)、懒汉式(线程不安全)、懒汉式(线程安全,同步方法)、懒汉式(线程不安全,同步代码块)、双重检查(推荐,线程安全、懒加载)、静态内部类(推荐)、枚举(推荐)
|
7月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
99 1
|
7月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
55 1
|
7月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
7月前
|
设计模式 Java
【Java】单例设计模式
【Java】单例设计模式
|
7月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)