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

一.面向对象的设计原则

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轮换。这里我们可以加上同步的一些函数,来防止出现这种情况。或者直接采用饿汉式。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值