首页 > 其他分享 >通过定义私有构造函数限制类的实例化

通过定义私有构造函数限制类的实例化

时间:2023-06-02 14:58:58浏览次数:44  
标签:私有 Instance 实例 Logger 日志 构造函数

当在一个类中定义了私有构造函数时,它将限制其他代码在类外部直接实例化该类的对象。这意味着除了类内部的代码,其他代码无法通过调用类的构造函数来创建类的实例。

通过定义私有构造函数,可以实现以下几个方面的控制:

  1. 防止类被意外地实例化:私有构造函数可以确保类的实例化只能在类的内部进行。这样可以防止其他代码意外地创建该类的对象,确保该类的使用符合设计意图。

  2. 实现单例模式:单例模式是一种设计模式,它要求一个类只能有一个实例。通过在类中定义私有构造函数,并在类内部控制实例的创建和访问,可以确保只有一个类的实例存在。

  3. 提供静态工厂方法:私有构造函数可以与静态工厂方法一起使用,使类的实例化过程更加灵活和可控。静态工厂方法是类中的一个静态方法,用于创建和返回类的实例,可以在创建实例之前进行一些额外的逻辑判断或操作。

举例:

假设我们有一个名为 "Logger" 的日志记录器类,我们希望在整个应用程序中只有一个日志记录器实例。我们可以使用单例模式来实现这一点。

public class Logger
{
    private static Logger instance;
    private List<string> logs;

    private Logger()
    {
        logs = new List<string>();
    }

    public static Logger Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Logger();
            }
            return instance;
        }
    }

    public void Log(string message)
    {
        logs.Add(message);
        Console.WriteLine("Log: " + message);
    }

    public void PrintLogs()
    {
        Console.WriteLine("Logs:");
        foreach (string log in logs)
        {
            Console.WriteLine(log);
        }
    }
}

在上述代码中,Logger 类被设计为单例模式。它具有一个私有的构造函数,以及一个公共的静态属性 Instance,用于获取 Logger 类的实例。当第一次访问 Instance 属性时,将创建一个 Logger 实例,并在后续的访问中返回该实例。

现在,我们可以在应用程序的任何地方使用 Logger 类来记录日志,而无需多次实例化它。例如:

Logger.Instance.Log("Error occurred: NullReferenceException");
Logger.Instance.Log("Warning: Invalid input detected");
Logger.Instance.PrintLogs();

通过 Logger.Instance,我们可以在不同的代码部分获取同一个 Logger 实例,并使用 Log 方法记录日志信息。最后,我们可以使用 PrintLogs 方法打印所有已记录的日志。

这样,通过单例模式,我们确保了整个应用程序中只有一个 Logger 实例存在,避免了多个日志记录器实例导致的资源浪费或日志信息的不一致性。

标签:私有,Instance,实例,Logger,日志,构造函数
From: https://www.cnblogs.com/kai-liang/p/17451725.html

相关文章

  • 2个场景实例讲解GaussDB(DWS)基表统计信息估算不准的处理方案
    摘要:通过2个实例场景讲解GaussDB(DWS)运维解决方案。本文分享自华为云社区《GaussDB(DWS)运维--基表统计信息估算不准的常见场景及处理方案》,作者:譡里个檔。场景1:基表过滤字段存在的隐式类型时,基表行数估算偏小这种场景绝大部分场景DWS能够处理,但是如果隐式类型转后的结果与......
  • 2个场景实例讲解GaussDB(DWS)基表统计信息估算不准的处理方案
    摘要:通过2个实例场景讲解GaussDB(DWS)运维解决方案。本文分享自华为云社区《GaussDB(DWS)运维--基表统计信息估算不准的常见场景及处理方案》,作者:譡里个檔。场景1:基表过滤字段存在的隐式类型时,基表行数估算偏小这种场景绝大部分场景DWS能够处理,但是如果隐式类型转后的结果与统计......
  • uobject只有可以声明无参构造函数和不写构造函数
    (一)结论:(二)测试过程:第一种:不声明任何构造函数:第二种:声明默认构造函数:第三种:声明其他构造函数:(直接报错,需要声明默认构造)(三)ue实现原理:UHT里可以解析出你是否定义了构造函数,是哪种构造函数:参数是否匹配“FObjectInitializer”:不同构造函数,对应使用不同的宏定义: 链接:ht......
  • java爬虫详解及简单实例
    java爬虫是一种自动化程序,可以模拟人类在互联网上的行为,从网站上抓取数据并进行处理。下面是Java爬虫的详细解释:1、爬虫的基本原理Java爬虫的基本原理是通过HTTP协议模拟浏览器发送请求,获取网页的HTML代码,然后解析HTML代码,提取需要的数据。爬虫的核心是HTTP请求和HTML解析。2......
  • java爬虫详解及简单实例
    java爬虫是一种自动化程序,可以模拟人类在互联网上的行为,从网站上抓取数据并进行处理。下面是Java爬虫的详细解释:1、爬虫的基本原理Java爬虫的基本原理是通过HTTP协议模拟浏览器发送请求,获取网页的HTML代码,然后解析HTML代码,提取需要的数据。爬虫的核心是HTTP请求和HTML解析。2、爬虫......
  • SAP ERP在玻璃包装行业的应用实例
    重庆昊晟玻璃股份有限公司创建于2001年;作为经重庆高新技术产业开发区管理委员会批复,按照现代股份制组建的一家专业从事玻璃瓶、玻璃晶品研发、设计、生产和销售于一体的高新技术企业,是重庆经开区、南岸区重点企业及重点扶持企业。昊晟拥有卓越的生产技术和生产设备设施,产品质量已达......
  • 通过实例了解vue3.3更新的特征
    开场白5月份,vue团队发布了vue3.3.这次小版本的发布主要解决了--Vue与TypeScript一起使用时的许多长期存在的痛点.下面我们一起来学习一下vue3.3新特征准备新新特征的环境根据官方团队的描述,我们需要准备一下工作。vue升级到3.3时,建议同时更新以下依赖项:Volar/vue......
  • 唯一客服 -基于ChatGPT和私有数据构建智能知识库和个性化AI
    基于ChatGPT和私有数据构建智能知识库和个性化AI1.注册开通2.上传文档3.智能助理更智能,基于ChatGPT大模型算法,回答准确,逻辑清晰更安全,支持私有化部署,文档数据本地化,安全可控更全面,可用于企业AI客服,企业内部知识查询&经验分享,员工自助服务,赋能企业外部合作伙伴、个人知识库等......
  • JDK 8 新特性:方法引用:静态方法和实例方法
         ......
  • RabbitMQ - 使用amqp库连接RabbitMQ(实例使用)
    1、发送端步骤分解如下:(1)建立连接conn,err:=amqp.Dial("amqp://admin:[email protected]:5672/")(2)打开channel这里的channel是AMQP里的概念,可以理解为多路复用的一个tcp长连接。(3)声明一个队列q,err:=ch.QueueDeclare(...)(4)创建消息msg:=amqp.Publishing{...}(5)发布......