c#设计模式4——创建型模式_单例模式

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

namespace _1.创建者模式_单例模式
{ //改为public,代表全局访问类
    public class Singleton2
    {
        //饿汉模式
        //饿汉模式,很饿很着急,所以类加载时即创建实例对象
        //好处:简单明了,无需关注线程安全问题。
        //缺点:如果在一个大环境下使用了过多的饿汉单例,则会生产出过多的实例对象,略微占内存
        //
        private static Singleton2 singleton = new Singleton2();

        private Singleton2() { }

        //对外公共接口
        public static Singleton2 getInstance()
        {
            return singleton;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Singleton2 s1 = Singleton2.getInstance();//调用单例的方法
        }
    }


    //单线程懒汉。
    ///饱不着急,延迟加载,啥时候用啥时候创建实例,存在线程安全问题
    不是线程安全的,因为是在需要的时候才会产生实例对象,生产之前会判断对象引用是否为空
    如果多个线程同时进入判断,就会生成多个实例对象,这是不符合单例的思想的
    饱汉模式为了保证线程安全,就用synchronized关键字标识了方法
    好处:延时加载,用的时候才会生产对象。
    缺点:需要保证同步,付出效率的代价。
    //public class Singleton2
    //{

    //    private static Singleton2 singleton=null;
    //    private Singleton2() { }

    //    public static Singleton2 getInstance()//synchronized
    //    {
    在第一次调用方法时,实例化;在类刚加载时不创建实例化
    只适用单线程,当多线程调用时,需要加锁
    //        if (singleton == null)
    //            singleton = new Singleton2();
    //        return singleton;
    //    }
    //}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值