zoukankan      html  css  js  c++  java
  • 设计模式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;
                }
            }
  • 相关阅读:
    【转】 Ubuntu安装jdk报错:-bash /usr/.../java:No such file or directroy
    sudo 出现unable to resolve host 解决方法
    C99 布尔
    面向对象?
    高斯消元
    白皮 Chapter 2
    白皮 Chapter 1
    开启暑假新生活( •̀ ω •́ )
    [vijos P1040] 高精度乘法
    [SCOI2007] 修车
  • 原文地址:https://www.cnblogs.com/sera/p/4223650.html
Copyright © 2011-2022 走看看