设计模式是软件开发必备的技能,但是只有少部分小伙伴才会去研究这块的内容。设计模式相关的书籍也比较多,为了让我们的设计模式能在实际工作中得到实践,把工作中运用到的设计模式记录下来。以便日后精益学习。
智能指针实例
智能指针模式,是自己命名的一种模式。因为该模式中会存在一个变量,用来控制内部状态,故而叫智能指针。
在业务使用中,我们可能会遇到同一个函数被多个地方调用,而多个地方在调用的过程中,又会存在相互事件触发,从而导致某些代码陷入递归调用中,从而引发死循环,或者业务逻辑执行不对。所以我们需要通过状态来保证我们的函数是否可执行,基本逻辑:函数入口到函数结束过程中,为了避免递归调用,增加状态控制量。当然,这种思路有点像栈,先进后出,用栈也是可以实现这种效果,但是会增加没有必要的内存占用。
不过为了学习,我们还是自己来实现一个简单的例子:
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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。