设计模式之代理模式(Proxy)
只能指针是代理模式的一种:
智能指针实现需要注意的问题:
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)的更多相关文章
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 大熊君说说JS与设计模式之------代理模式Proxy
一,总体概要 1,笔者浅谈 当我们浏览网页时,网页中的图片有时不会立即展示出来,这就是通过虚拟代理来替代了真实的图片,而代理存储了真实图片的路径和尺寸,这就是代理方式的一种. 代理模式是比较有用途的一 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
- Java基础-设计模式之-代理模式Proxy
代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理 ...
- [设计模式] 12 代理模式 proxy
在GOF的<设计模式:可复用面向对象软件的基础>一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问.结合上面的游戏代理的例子和下面的图,我们来进行分析一下.以前你是这 ...
- c#设计模式之代理模式(Proxy Pattern)
引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...
- 设计模式三: 代理模式(Proxy) -- JDK的实现方式
简介 代理模式属于行为型模式的一种, 控制对其他对象的访问, 起到中介作用. 代理模式核心角色: 真实角色,代理角色; 按实现方式不同分为静态代理和动态代理两种; 意图 控制对其它对象的访问. 类图 ...
- 设计模式 笔记 代理模式 Proxy
//---------------------------15/04/21---------------------------- //Proxy 代理模式-----对象结构型模式 /* 1:意图: ...
- 【设计模式】—— 代理模式Proxy
前言:[模式总览]——————————by xingoo 模式意图 代理模式为其他的对象增加一个代理对象,进行访问控制.从而避免直接访问一个对象,造成效率或者安全性上的降低. 应用场景 1 远程代理, ...
- 结构型设计模式之代理模式(Proxy)
结构 意图 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P r o x y 模式常见 ...
随机推荐
- PHP导出excel文件
现在教教你如何导入excel文件: 在我的文件储存里面有一个com文件夹的,将其解压放在ThinkPHP/Library/文件夹里面,然后就是写控制器啦!去调用这个插件: <?php names ...
- 短信接口调用以及ajax发送短信接口实现以及前端样式
我们短信api用的是云信使平台提供的非免费短信服务:官网提供的demo有两种,分别是function加其调用.class文件加其调用. 在这里我们用class文件加调用: 首先,ThinkPHP里面自 ...
- ThinkPHP实现联动菜单;
联动菜单,首先给你看看前端是怎么写的:
- Yii整合ZF2及soap实例
一)如何整合? // change the following paths if necessary $yii = dirname(__FILE__).'/framework/yii.php'; $c ...
- try 返回前执行fianlly
try catch finally 语句中 如果try中有返回语句,如果在fianlly代码块中有对这个值修改的话,并不影响其放回值 public class Test { public stati ...
- android ping网络是否成功
public static boolean pingHost(String str) { //str 为要ping的IP地址 boolean result = false; try { Process ...
- jQuery学习笔记(2)
val() 当鼠标放上去的时候,文本消失,鼠标拿开,文本恢复 效果图: code as below: <html xmlns="http://www.w3.org/1999/xhtml ...
- Oracle 11g 执行计划管理1
1. 执行计划管理的工作原理 1.1控制执行计划的稳定性 11g之前,可以使用存储大纲(stored outline)和SQL Profile来固定某条SQL语句的执行计划,防止由于执行计划发生变化而 ...
- 共享内存shared pool (5):详解一条SQL在library cache中解析
前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...
- 【标题】一本帮你提高Excel办公效率的VBA书
公司工程部男同事,EXCEL能力最强的前三位,分别号称:大表哥 二表哥 三表哥 公司财务部女同事,EXCEL能力最强的前三位,分别号称:大表姐 二表姐 三表姐 想成为你们公司的“表哥”.“表姐”? 但 ...