设计模式是软件开发必备的技能,但是只有少部分小伙伴才会去研究这块的内容。设计模式相关的书籍也比较多,为了让我们的设计模式能在实际工作中得到实践,把工作中运用到的设计模式记录下来。以便日后精益学习。

智能指针实例

智能指针模式,是自己命名的一种模式。因为该模式中会存在一个变量,用来控制内部状态,故而叫智能指针。

在业务使用中,我们可能会遇到同一个函数被多个地方调用,而多个地方在调用的过程中,又会存在相互事件触发,从而导致某些代码陷入递归调用中,从而引发死循环,或者业务逻辑执行不对。所以我们需要通过状态来保证我们的函数是否可执行,基本逻辑:函数入口到函数结束过程中,为了避免递归调用,增加状态控制量。当然,这种思路有点像栈,先进后出,用栈也是可以实现这种效果,但是会增加没有必要的内存占用。

不过为了学习,我们还是自己来实现一个简单的例子:

        class SmartPointerOperator : IDisposable
        {
            private int _flag;

            public SmartPointerOperator BeginUpdate()
            {
                _flag++;
                return this;
            }

            public bool CanUpdate
            {
                get
                {
                    if (_flag == 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }

            public void Reset()
            {
                _flag = 0;
            }

            public void Dispose()
            {
                _flag--;
            }
        }

继承IDisposable的目的,只是为了让他能够支持using语法。

调用方法:


    //哪些地方需要添加状态控制,使用using语法包起来
    //控制逻辑
    using (_smartPointerOperator.BeginUpdate())
    {

    }


    //调用逻辑,判断当前状态是否可用
    if (_smartPointerOperator.CanUpdate)
    {
      //todo:
    }

至此,我们简易的智能指针设计模式就结束了。未来如果有遇到类似场景,就可以使用这种模式来保证状态的正确性。


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E6%99%BA%E8%83%BD%E6%8C%87%E9%92%88.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系