只能指针是代理模式的一种:

智能指针实现需要注意的问题:

1.构造函数指明显示构造。

2.拷贝构造函数,先断开前一个指针,然后用之前指针的值初始化现在的指针。

3.赋值函数需要先断开之前的指针,然后释放现在指针指向的内存,最后用之前的指针赋值现在的指针。

4.参数是引用,避免产生临时对象。

代码如下:

#include <iostream>
#include <string> /************************************************************************/
/* 代理模式的智能指针的实现 */
/************************************************************************/ template<typename T>
class auto_ptr
{ public:
explicit auto_ptr(T *pointer = NULL):m_pointer(pointer){}
auto_ptr(const auto_ptr<T>& rhs):m_pointer(rhs.release()){}
auto_ptr<T>& operator=(auto_ptr<T>& rhs)
{
if (this != &rhs)
{
m_pointer = reset(rhs.release());
return *this;
}
}
T& operator*(){return *m_pointer;}
T* operator->(){return m_pointer;}
T* get() const
{
return m_pointer;
}
T* release()
{
T* oldpointer = m_pointer;
m_pointer = NULL;
return oldpointer;
} void reset(T *p = NULL)
{
if (p != m_pointer)
{
delete m_pointer;
m_pointer = p;
} }
private:
T *m_pointer;
}; int main()
{ return 0;
}

延迟打开大图像

#include <iostream>
#include <string> using namespace std; class Image
{
public:
Image(string name):m_imagename(name){}
virtual void show()
{ }
protected:
string m_imagename;
}; class BigImage:public Image
{
public:
BigImage(string name):Image(name){}
virtual void show()
{
cout << m_imagename <<" show big image" <<endl;
}
};
class BigImageProxy:public Image
{
public:
BigImageProxy(string name):Image(name),m_pimage(0){}
virtual void show()
{
if (m_pimage == NULL)
{
m_pimage = new BigImage(m_imagename);
}
m_pimage->show();
}
private:
BigImage* m_pimage;
}; int main()
{
Image *pimage = new BigImageProxy("big.jpg");
pimage->show();
return 0;
}

设计模式之代理模式(Proxy)的更多相关文章

  1. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  2. 大熊君说说JS与设计模式之------代理模式Proxy

    一,总体概要 1,笔者浅谈 当我们浏览网页时,网页中的图片有时不会立即展示出来,这就是通过虚拟代理来替代了真实的图片,而代理存储了真实图片的路径和尺寸,这就是代理方式的一种. 代理模式是比较有用途的一 ...

  3. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...

  4. Java基础-设计模式之-代理模式Proxy

    代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理 ...

  5. [设计模式] 12 代理模式 proxy

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问.结合上面的游戏代理的例子和下面的图,我们来进行分析一下.以前你是这 ...

  6. c#设计模式之代理模式(Proxy Pattern)

    引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...

  7. 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种, 控制对其他对象的访问, 起到中介作用. 代理模式核心角色: 真实角色,代理角色; 按实现方式不同分为静态代理和动态代理两种; 意图 控制对其它对象的访问. 类图 ...

  8. 设计模式 笔记 代理模式 Proxy

    //---------------------------15/04/21---------------------------- //Proxy 代理模式-----对象结构型模式 /* 1:意图: ...

  9. 【设计模式】—— 代理模式Proxy

    前言:[模式总览]——————————by xingoo 模式意图 代理模式为其他的对象增加一个代理对象,进行访问控制.从而避免直接访问一个对象,造成效率或者安全性上的降低. 应用场景 1 远程代理, ...

  10. 结构型设计模式之代理模式(Proxy)

    结构 意图 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P r o x y 模式常见 ...

随机推荐

  1. 破解金盘gdlisxp系统

    1.现在要破解的金盘gdlisxp系统版本 2.首先在你电脑上要有脱壳工具AspackDie,和OllyDBG动态调试工具,电脑上装好金盘软件. 3.用AspackDie进行对金盘应用程序脱壳处理,生 ...

  2. css3动画响应式404页面

    PC端效果: 模拟触屏端效果: 兼容性:触屏端及桌面端(优雅降级至IE6) 模板下载: http://pan.baidu.com/s/1o67ftc2

  3. Java编程性能优化

    1尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资 ...

  4. php的register_shutdown_function函数详解

    function shutdown() { $last_error = error_get_last(); if ($last_error) { error_log(print_r($last_err ...

  5. 有趣的EditView为空时的抖动效果(用户名和密码)--第三方开源--ClearEditText

    ClearEditText在github上的链接地址是:https://github.com/zhangphil/ClearEditText 用法十分简单,在布局中使用ClearEditText,在J ...

  6. 自定义DatePicker,年月日,不显示其中某几项

    经过源码研究:该结构主要包含三个NumberPicker: private final NumberPicker mDayPicker; private final NumberPicker mMon ...

  7. ASP.NET MVC4学习笔记路由系统实现

    一.路由实现 路由系统实际是一个实现了ASP.NET IHttpModule接口的模块,通过注册HttpApplication的PostResolveRequestCache 事件对Url路由处理.总 ...

  8. DMA直接内存存取20160525

    说一下工作中接触到的DMA1)在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题.即DMA传输前,CPU要把 总线控制权交给DMA控制器,而在结束DMA传输后,DMA ...

  9. linux下的声卡驱动架构

    1.linux下的声卡驱动架构主要分为OSS架构和ALSA架构. 2.OSS架构 OSS全称是Open Sound System,叫做开放式音频系统,这种早期的音频系统这种基于文件系统的访问方式,这意 ...

  10. python的http请求应用--每日签到

    写点python吧,python其实是个很好用的工具,作为浇水语言,跟其他语言联系也很紧密,想用什么包直接import,导入ctypes调用底层函数库,导入web相关的包可以轻松写爬虫,今天我们写的跟 ...