当前位置: 首页 > wzjs >正文

移动商城网站建设seo标题优化的心得总结

移动商城网站建设,seo标题优化的心得总结,西安网站排名公司,建设网站目录前面介绍了工厂模式控制了智能指针和资源对象的创建过程,现在介绍一下智能指针是如何利用代理模式来实现“类指针(like-pointer)”的功能,并控制资源对象的销毁过程的。 2、代理模式 代理模式是为其它对象提供一种代理以控制对这…

前面介绍了工厂模式控制了智能指针和资源对象的创建过程,现在介绍一下智能指针是如何利用代理模式来实现“类指针(like-pointer)”的功能,并控制资源对象的销毁过程的。

2、代理模式

代理模式是为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不直接引用另一个对象,而是通过一个代理对象在客户端和目标对象之间起到中介的作用,这个代理对象提供了和目标对象完全一样的功能接口,客户端访问这个代理对象就像是在访问目标对象一样,同时代理对象根据需要在访问目标对象时进行了控制。智能指针就起到了客户端和裸指针的中介代理作用。

按照GOF的说法,组成代理模式的角色有:
主题角色(Subject):定义了代理角色和真实角色的共用接口方法,这样在任何使用真实角色的地方都有可以使用代理角色。
代理角色(Proxy):实现主题角色接口方法,是真实角色的代理,通过真实角色的业务逻辑方法来实现主题角色的接口方法,并可以附加自己的操作,对真实角色的行为进行控制。
真实角色(RealSubject):实现主题角色接口方法,定义了真实角色所要实现的业务逻辑,供代理角色调用。

代理模式的类结构如下图所示:
在这里插入图片描述

智能指针使用面向对象技术封装了C++中的裸指针,是裸指针的包装类,它按照RAII惯用法来管理指针资源,可以在失去生存期时同时把所管理的资源释放掉,得益于C++的操作符重载,智能指针提供了*、->等操作符,它的行为就像是指针,可以按照指针的形式来对智能指针对象进行操作,比如使用“*”操作符来解引用所指向的内容,使用“->”操作符来访问所指向的结构对象的成员,就像是在操作一个普通指针一样。

我们不妨脑洞大开一下,如果把“指针”当作是一种对象,使用面向对象进行设计的话,可以大体定义成类似下面的class:

template<typename T>
class pointer {
private:T *address; // 数据成员public:pointer(T *p);// 下面是成员函数T *operator++();T *operator--();T *operator+=(int offset);T *operator-=(int offset);T operator*();T operator[int index];T *operator->();delete();
}

再看unique_ptr和shared_ptr类,可以把它们当作是pointer基类的派生类,它们提供了pointer定义的成员方法,并且还包含了一个pointer指针。

以shared_ptr为例,可以视为下面的class:

class shared_ptr : public pointer {
private:pointer ptr; // 资源对象指针,指向被代理对象ref_count *refcnt; // 引用计数
public:shared_ptr(pointer p) {...其它操作ptr = p;}T operator*() {return *ptr;}T *operator->() {return ptr;}~shared_ptr() {...其它操作ptr->delete();}...其它成员函数
}

从类的结构形式上看,shared_ptr类继承于pointer类,并且拥有一个pointer类型的数据成员,正好符合代理模式的类结构图:基类pointer对应subject主题类,而shared_ptr类对应proxy代理类,shared_ptr还包含了一个类型为基类pointer的数据成员ptr,即被代理对象,在实践中就是裸指针。再看shared_ptr的功能,它public继承了pointer类,因此它对外提供了pointer类的接口,例如解引用操作符*和成员访问操作符->,当调用shared_ptr的这些接口时,它会把请求转发到数据成员ptr的对应接口上。同时它也对相关的接口做了控制,比如为了防止访问内存越界,没有提供指针的算术运算,更重要的是,它控制了资源对象的生存期管理,比如,只有在引用计数为0时才释放资源对象,这也正是智能指针的重要功能。也就说,shared_ptr对内包含了一个指针类型成员,对外又表现为一个指针类型,而且还对指针成员的行为做出了控制。这不正是代理模式吗?

由此可见,智能指针unique_ptr和shared_ptr的实现正是代理模式的典型应用。当然,如果严格地按照面向对象编程的特征,因为C++中没有“指针”类,指针只是C++固有的基本类型,可能不是标准的代理模式,虽然外在形式上不同,但确实表现出了代理模式的思想和意图:提供了与裸指针相同的功能,并把请求转发给裸指针处理,同时对裸指针的操作进行了控制(如不提供某种操作,或者限制使用),最核心的控制是能够对裸指针指向的资源对象进行了生存期管理。

此外,C++中还有另一种形式的“类指针”对象:迭代器,它也实现了*、->等操作符函数,而且还提供了++、–、+=、-=等算术操作符,对照代理模式来分析,它也是使用代理模式来实现的(注:它是标准的迭代器模式,这里关注的是它的“类指针”特性)。不过,智能指针作为指针的代理对象,控制的是被代理对象——指针的生存期管理,而迭代器作为“集合指针”(如指向数组的指针)的代理对象,控制的是对所代理的集合指针的遍历访问行为,可以不用关心底层的数据存储方式,同时控制访问时不会越界,显然它的核心功能是指针的算术操作,因为容器里存放的都是对象集合,不止一个,为迭代器提供指针的算术运算操作再正常不过了。

总之,尽管指针在编程使用时,容易发生内存泄漏、指针越界、野指针、重复释放等错误。但是通过它的代理对象-智能指针,可以很好的控制指针的行为,尽可能的避免了一些错误的发生。

如果说智能指针使用工厂模式控制了资源对象的创建过程,那它使用代理模式控制了资源对象的销毁过程:可以控制它在智能对象失去生存期时也立即销毁资源对象,如unique_ptr,也可以控制它在最后一个引用它的智能指针对象失去生存期时再销毁,如shared_ptr。

智能指针又是怎样释放资源对象的呢?下一篇文章介绍所使用的另一种设计模式。

http://www.dtcms.com/wzjs/178633.html

相关文章:

  • 南京做网站的额百度app手机版
  • 长葛做网站汕尾网站seo
  • 淘宝导购网站源码优化大师app下载
  • 舆情服务网站网络安全培训机构哪家好
  • 精美ppt模板下载免费大冶seo网站优化排名推荐
  • JAVA网站301重定向怎么做优化大师官方网站
  • 苏州那家公司做网站好qq推广软件
  • 手机 网站 模板杭州疫情最新消息
  • 手机网站建设新闻最近几天的新闻
  • 手機如何做网站百度近日收录查询
  • 重庆购务网站建设全网关键词搜索工具
  • 日韩男女直接做的视频网站nba湖人队最新消息
  • 北京网站建设成都重庆百度seo排名
  • 人力资源公司网站模板下载软文营销什么意思
  • 设计素材网站黄金烤肠云搜索app下载
  • 嵌入式软件开发面试广州网站优化服务商
  • 重庆网站自己推广专业seo站长工具
  • 九台市做网站的公司优化网站建设
  • 智游泰州小程序怎么注册百度seo多久能优化关键词
  • 网站建设公司合同项目推广方案
  • 安徽鲁班建设集团网站营业推广策划
  • 网站开发我们都能解决公司网站建设多少钱
  • 垂直门户网站的盈利模式探讨互联网推广引流是做什么的
  • 保洁公司用哪些网站做推广免费建立个人网站
  • 汉中专业做网站免费友链互换
  • 福建两学一做网站昆明网络营销公司哪家比较好
  • axure怎么做网站原型网站开发公司哪家好
  • 网站怎么做IPv6少儿编程培训机构排名前十
  • 上海网站建设开全国疫情最新报告
  • 如何将网站内容做chm怎么做网站推广和宣传