设计模式学习笔记--单例模式

本文探讨了面向对象设计原则,如单一职责、开闭原则等,并重点介绍了单例模式,一种确保类只有一个实例的方法。单例模式常用于文件管理、数据库连接池等场景,其实现方式包括饿汉式等。
摘要由CSDN通过智能技术生成

一.面向对象的设计原则

1.单一职责原则: 系统中每个对象只有一个单独的职责,对外提供一种功能,引起类变化的原因只有一个。

2.开闭原则:即对修改关闭,对扩展开放。要更改时是通过增加代码进行的,而不是改动现在的代码,否则会产生不可预知的后果。

3.依赖注入原则:要依赖于抽象,不要依赖于具体的实现,如果有类调用其他的类,就应该调用类的接口或者抽象类,而不是直接调用实现类。

4.里氏替换原则:任何抽象类出现的地方都可以用实现类来替换。

5.迪米特原则:一个对象应当对其他对象尽可能少的了解,降低耦合度。

6.接口分离原则:一个接口应该只提供一种对外功能。

7.优先使用组合而不是继承:继承会导致级联变化,较难修改。


二.单例模式

当一个对象在整个程序中只有一个的时候,每次获得该对象,应该获得都是同一个对象,这时候就应该用单例模式。

有两种,一种是饿汉式,饿得等不及了,一开始就创建了一个对象。

/*
 单例模式(饿汉式)
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式Demo
{

    class Singleton
    {
        static Singleton singleton = new Singleton();
        public static Singleton GetSingleton()
        {
            return singleton;
        }
        public void Show()
        {
            Console.WriteLine("hehe!");
        }
        //构造函数私有化
        private Singleton()
        { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Singleton.GetSingleton().Show();
            Console.ReadLine();
        }
       
    }

    
}

另一种是懒汉式,先偷会儿懒,等到用的时候才创建:

/*
 单例模式(懒汉式)
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式Demo
{

    class Singleton
    {
        static Singleton singleton = null;
        public static Singleton GetSingleton()
        {
            if (singleton == null)
                singleton = new Singleton();
            return singleton;
        }
        public void Show()
        {
            Console.WriteLine("hehe!");
        }
        //构造函数私有化
        private Singleton()
        { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Singleton.GetSingleton().Show();
            Console.ReadLine();
        }
       
    }

    
}


注意,在懒汉式中,如果有多线程,有可能会出现问题。即判断singleton==null之后,有可能发生CPU轮换。这里我们可以加上同步的一些函数,来防止出现这种情况。或者直接采用饿汉式。


单例模式经常在文件管理,数据库连接池等中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值