设计模式--单例模式

1.单例模式:关注于对象的创建。分为懒汉式和饿汉式。

懒汉式:调用方法的时候才创建;

复制代码
class Singleton
    {
        private Singleton() //1.私有构造方法
        {
            Console.WriteLine("构造方法被创建");
            
        }
        private static volatile Singleton _Singleton = null;//3.全局唯一静态,重用这个变量
        private static object Singleton_Lock = new object();

        public static Singleton CreateInstance()//2.公开的静态方法提供对象实例
        {
            if(_Singleton == null)//4.多线程,双判断加锁
            {
                lock (Singleton_Lock)
                {
                    if (_Singleton == null)
                    {
                        _Singleton = new Singleton();
                    }
                }
            }
            return _Singleton;
        }
        public int iTotal = 0;
        internal void Show()
        {
            iTotal++;
        }
    }
复制代码

饿汉式1:静态构造函数中创建,一开始就创建

复制代码
class SingletonSecond
    {
        private SingletonSecond()
        {
        }
        static SingletonSecond()
        {
            _SingletonSecond = new SingletonSecond();
        }
        public static SingletonSecond _SingletonSecond = null;
        public SingletonSecond CreateInstance()
        {
            return _SingletonSecond;
        }
        /// <summary>
        /// 原型模式--主要用于克隆的方式比创建快的场景
        /// </summary>
        /// <returns></returns>
        public static SingletonSecond CreateInstancePrototype()
        {
            SingletonSecond second = (SingletonSecond)_SingletonSecond.MemberwiseClone();
            return second;
        }
    }
复制代码

饿汉式2:使用静态字段创建对象

复制代码
class SingletonThird
    {
        private SingletonThird()
        {

        }
        /// <summary>
        /// 静态字段:在第一次使用这个类之前,初始化且只初始化一次
        /// 这个比构造函数还早
        /// </summary>
        public static SingletonThird _SingletonThird = new SingletonThird();
        public static SingletonThird CreateInstance()
        {
            return _SingletonThird;
        }
    }
复制代码

2.三大工厂:简单工厂、工厂方法、抽象工厂

一.简单工厂:把创建对象的过程封装成工厂。

//想去细节,想去掉什么,封装一下
                IRace race = ObjectFactory.CreateRace(RaceType.Human);
                IRace race = ObjectFactory.CreateRaceConfig();
                IRace race = ObjectFactory.CreateRaceConfigReflection();
复制代码
class ObjectFactory
    {
        public static IRace CreateRace(RaceType raceType)
        {
            IRace iRace = null;
            switch (raceType)
            {
                case RaceType.Human:
                    iRace = new Human();
                    break;
                case RaceType.NE:
                    iRace = new NE();
                    break;
                case RaceType.ORC:
                    iRace = new ORC();
                    break;
                case RaceType.Undead:
                    iRace = new Undead();
                    break;

                default:
                    break;
            }
            return iRace;
        }

        public static IRace CreateRaceConfig()
        {
            string IRaceTypeConfig = "";
            RaceType raceType = (RaceType)Enum.Parse(typeof(RaceType), IRaceTypeConfig);
            return CreateRace(raceType);
        }

        public static IRace CreateRaceConfigReflection()
        {
            Assembly assembly = Assembly.Load("");
            Type type = assembly.GetType("");
            IRace iRace = Activator.CreateInstance(type) as IRace;
            return iRace;
        }
    }
复制代码

二.工厂方法:每个工厂只负责一个对象的创建(建造者模式:是为了创建一个更复杂的对象)

          IFactory factory = new HumanFactory();
                IRace race = factory.CreateRace();

     这样做的好处是:可以增加创建逻辑,屏蔽对象实例化的复杂度,对象创建的过程中,可以扩展(尤其式IOC)

复制代码
public class HumanFactory : IFactory
    {
        public virtual IRace CreateRace()
        {
       console.write("增加的创建逻辑")
return new Human(); } public class HumanFactoryAdvanced : HumanFactory //可扩展体现在此处 { public override IRace CreateRace() { Console.WriteLine("123"); return new Human(); } } }
复制代码

三.抽象工厂:一个工厂负责产品簇的创建:

复制代码
class HumanFactory : FactoryAbstract
    {
        public override IArmy CreateArmy()
        {
            throw new NotImplementedException();
        }

        public override IHero CreateHero()
        {
            throw new NotImplementedException();
        }

        public override IRace CreateRace()
        {
            throw new NotImplementedException();
        }

        public override IResource CreateResource()
        {
            throw new NotImplementedException();
        }
    }
复制代码

 

posted @   你好呀嗯嗯  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示