C#设计模式

一、主要目的当一个系统或者是一个应用涉及面很广,功能繁多,业务逻辑十分复杂的时候,程序员往往需要花费大量的时间去摸索实现方式。直到一个大佬结合了日常开发中所用

一、主要目的

  当一个系统或者是一个应用涉及面很广,功能繁多,业务逻辑十分复杂的时候,程序员往往需要花费大量的时间去摸索实现方式。

  直到一个大佬结合了日常开发中所用到的思想,并总结出了二十三种设计模式。直至今日这些设计模式被程序员广泛应用。

  它的作用十分的直观:让代码变得更加简洁易懂方便交互,并且易于扩展,能够承载复杂的业务逻辑。

二、高内聚、低耦合

  在了解内聚跟耦合之前,我们得了解一下什么是 模块

  大到一个项目,小到一个方法,一个字段都可以是模块,而分隔模块的核心原则就是将可变化的部分看做是一个模块,让其在变化的时候

  尽量不会影响到其他的部分。

  高内聚:模块内具有很高的相似度。

  低耦合:模块之间依赖程度很低,就像情侣一样,没在一起之前是没什么依赖关系的,属于低耦合。在一起之后就是高耦合了

三、七大设计原则

  设计原则的本质我觉得就是把可变的,签名相同的方法都抽象出来,而抽象方法的最好办法就是接口或者抽象类。这样做的好处就是把各模块之间分开来,降低了耦合,

以此来达到修改时不会影响其他模块的目的,加强了可扩展性。

1、单一职责:一个类负责一件事,引起类变更的原因只有一种。

  1)提高了代码的可读性,降低了类的复杂性,一个模块只负责一个职责

  2)降低变更引起的风险

2、开放封闭原则:对功能扩展开放,且面向修改代码时不会影响其他模块。

  1)一个软件实体(指的类、函数、模块等)应该对扩展开放,对修改关闭。即每次发生变化时,要通过添加新的代码来增强现有类型的行为,而不是修改原有的代码。

  2)符合开闭原则的最好方式是提供一个固有的接口,然后让所有可能发生变化的类实现该接口,让固定的接口与相关对象进行交互。

3、依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。本质就是通过抽象使各模块之间实现独立。

4、里氏转换原则:子类可以替换父类。

5、迪米特原则(最少认知原则):降低类之间的耦合,要求类对其他的类保持最少的了解,就像人与人之间保持一定距离,互不了解。该原则针对类。

6、接口分离原则:在单一职责的基础上,接口尽量细分。且客户端不应该依赖无关的接口。该原则针对接口

7、合成复用原则:将已有对象纳入新对象,作为新对象来实现,新对象通过向这些对象的委派达到复用已用功能的目的。其目的是为了避免继承,继承会破坏类的封装性。

四、常用的几种设计模式

1、单例模式:一个类只允许存在一个实例,如何确保只有一个实例?

  1)首先我们得把创建实例放在类中,私有化构造函数,这样类外部就无法new对象,但是如果放在构造函数中,每调用一次构造函数就会创建一次对象不符合单例模式,

因此需要在类中定义一个方法。

 public static Singleton GetInstance()
        {
            // 当第一个线程运行到这里时,此时会对locker对象 "加锁",
            // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁
            // lock语句运行完之后(即线程运行完之后)会对该对象"解锁"
            // 双重锁定只需要一句判断就可以了
            if (uniqueInstance == null)
            {
                lock (locker)
                {
                    // 如果类的实例不存在则创建,否则直接返回
                    if (uniqueInstance == null)
                    {
                        uniqueInstance = new Singleton();
                    }
                }
            }
            return uniqueInstance;
        }

  在考虑单例模式的时候,不仅要顾及多线程可能会破坏单例,反射也可以做到这一点,因此我们需要在设计时尽量考虑全面,使其功能足够强大。

单例模式有两种模式:饿汉式、懒汉式

 

 

 

  

标签: 就会 就像 会对