zoukankan      html  css  js  c++  java
  • 设计模式之代理模式(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;
    }
    
  • 相关阅读:
    configure错误列表供参考
    php和AJAX用户注册演示程序
    php中文汉字截取函数
    阻止a标签点击跳转刷新
    js日期插件
    apache 开启Gzip网页压缩
    查询文章的上下篇Sql语句
    thinkphp简洁、美观、靠谱的分页类
    thinkphp自定义模板标签(二)
    thinkphp自定义模板标签(一)
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3205569.html
Copyright © 2011-2022 走看看