欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式初步学习笔记(单例模式)

程序员文章站 2022-03-20 12:21:27
关于设计模式,很久以前通过在网上看了一些资料关于讲设计模式的(推荐大话设计模式),虽说都似乎看懂了,但每次在需要用到相关设计模式的时候总是想不起来,主要对每种设计模式使用场景没研究透,一直停留在表面。最近做设计系统的时候突然觉得这块还是有必要深入一点,通过各方面查找重新梳理了一下设计模式,个人理解笔 ......

       关于设计模式,很久以前通过在网上看了一些资料关于讲设计模式的(推荐大话设计模式),虽说都似乎看懂了,但每次在需要用到相关设计模式的时候总是想不起来,主要对每种设计模式使用场景没研究透,一直停留在表面。最近做设计系统的时候突然觉得这块还是有必要深入一点,通过各方面查找重新梳理了一下设计模式,个人理解笔记

  一、 设计模式(design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的                                 --------引用菜鸟教程设计模式一段话、 

  二、设计模式六大原则

1、开闭原则(open close principle):对扩展开放,对修改关闭;系统设计的时候考虑后期如果新需求变更等,不要通过修改原有类代码,通过新增类来处理

2、里氏代换原则(liskov substitution principle):任何父类出现的地方都可以用子类去替换,从而达到父类复用

3、依赖倒转原则(dependence inversion principle):依赖于接口编程;上端依赖抽象,不具体依赖实现。例如:电脑厂家在生产电脑的时候,不会去指定按照某一个型号的鼠标去生产,他们会按照usb接口去实现,鼠标只要实现这个usb接口就可以

4、接口隔离原则(interface segregation principle):  用多个专门的接口,而不使用单一的总接口,客户端不应该依赖他不需要的接口

5、迪米特法则,又称最少知道原则(demeter principle):两个类尽量不要有太多的交际通讯,假如一定要通讯,通过第三方来协调

6、合成复用原则(composite reuse principle):尽量使用合成/聚合的方式,而不是使用继承。

  三、23种设计模式

     设计模式分为三类:

     创建型模式:关注对象的创建(共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。)

     结构型模式:关注类与类之间的关系(共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式)

     行为型模式:关注对象和行为的分离(共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)

  四、主要讲一下单例模式实现方式

       单例模式有2种实现方式(饱汉试、饿汉试)

      饱汉试:在第一次使用的时候才初始化类对象

      饿汉试:系统加载的时候提前初始化对象,通过静态构造函数实现

     

 public class singleton
    {
           private static object _objectinstance = new object();
           public static singleton _instance = null;
            private singleton()   //私有化构造方法防止外面new对象
            {
                system.threading.thread.sleep(5000);//模拟构造延迟测试
            }


            #region 单例方法实现(饱汉试)
            //public static singleton createinstance()
            //{
            //    if (_instance == null)        //双层判断优化性能+线程安全
            //    {
            //        lock (_objectinstance)
            //        {
            //            if (_instance == null)
            //            {
            //                _instance = new singleton();
            //            }
            //        }
            //    }
            //    return _instance;
            //}
            #endregion

            #region 静态构造函数实现单例  (饿汉试)
            static singleton()
            {
                if (_instance == null)        //双层判断优化性能+线程安全
                {
                    lock (_objectinstance)
                    {
                        if (_instance == null)
                        {
                            _instance = new singleton();
                        }
                    }
                }
            }
            #endregion
       
    }