设计模式01(创建性设计模式)

简单列出这几个设计模式所包含的部分

1. 简单工厂模式

1.1 基类

1.2 方法类:通过基类,实现业务的方法类

1.3 业务类:根据业务传递过来的字符,判断需要创建对应的方法类

1.4 前台:前台调用业务类,传递1.3所需的字符

2.工厂模式

2.1 接口:创建统一的工厂操作接口(这个工厂需要生产的东西,比如对象,或者实现的方法)

2.2 基类

2.3 方法类:通过基类,实现业务的方法类,

2.4 业务类:将不用业务需要的字符,创建实现接口的业务类,业务类调用该业务的方法

2.5 前台:前台调用业务类

3.抽象工厂

3.1 接口:创建统一的工厂操作接口(这个工厂需要生产的东西,比如对象,或者实现的方法)

3.2 基类

3.3 方法类:通过基类,实现业务的方法类,

业务类:将不用业务需要的字符,创建实现接口的业务类,这里不使用new来直接操作方法类,通过反射来实现对象的创建。

 	private static readonly string AssemblyName = "AdstractFactory";
        private static readonly string db = "Sqlserver";

        public static IUser CreateUser()
        {
            string className = AssemblyName + "." + db + "User";
            return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
        }

3.4 前台:前台调用业务类

4.原型模式

原型模式包含两部分浅复制和深复制

4.1 浅复制:在本类中提供一个方法Clone,如果类中全是值类型,则只需MemberwiseClone浅复制就行

        /// <summary>
        /// 浅复制
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            return this.MemberwiseClone();
        }

4.2 深复制:本类中如果存在引用类型,则需深复制,在本类中提供一个私有构造函数,复制本类的引用类型,提供一个Clone,全部重新复制本类

        private Prototype(Hobby _hobby)
        {
            this.Hobby = (Hobby)_hobby.Clone();
        }
        /// <summary>
        /// 深复制
        /// </summary>
        /// <returns></returns>
        public Prototype Clone()
        {
            Prototype pro=new Prototype(this.Hobby);
            pro.ID = this.ID;
            pro.Name = this.Name;
            return pro;
        }

5.创建者模式

5.1 创建者接口:创建需要实现的方法(工序的过程)

5.2 方法类:实现接口

5.3 指挥者:根据产品特点,完成组装,对外提供可选的产品。

创建者模式和工厂很相似,不同的是创建者模式,有一个指挥者,最后提供一个结果

6.单例模式

6.1 懒汉式单例:使用双层判断,创建全局唯一的访问变量

        public static Singleton Instance
        {
            get
            {
                if (_Instance == null) //双重锁定
                {
                    lock (syncRoot)
                    {
                        if(_Instance==null)
                            _Instance = new Singleton();
                    }
                }
                return _Instance;
            }
        }

6.2 饿汉式单例:使用公共语言时,在初始化的时候用readonly,和static来创建对象

  	private static  readonly Singleton01 _Instance=new Singleton01();

        private Singleton01()
        {
        }
        public static Singleton01 Instance
        {
            get
            {
                return _Instance;
            }
        }
原文地址:https://www.cnblogs.com/sera/p/4223650.html