大话设计模式C++实现-文章7章-代理模式
一个、UML画画
二、概念
代理模式:为其它对象提供一种代理以控制对这个对象的訪问。
三、应用场景
(1)远程代理。也就是为一个对象在不同的地址空间提供局部代表。这样能够隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理,是依据须要创建开销非常大的对象。通过他来存放实例化须要非常长时间的真实对象。
比如:图片载入的时候。
(3)安全代理。用来控制真是对象訪问时的权限。
(4)智能指引,是指当调用真实的对象的时候。代理处理另外一些事。
根本原理:代理模式事实上就是在訪问对象的时候引入了一定程度的间接性,由于这样的间接性。能够附加多种用途。
四、C++实现
(1)Proxy.h
#include <iostream>
#include <string> //SchoolGirl类
class SchoolGirl
{
private:
std::string name;
public:
void setName(std::string name)
{
this->name=name;
}
std::string getName()
{
return name;
}
}; //Subject类。定义了RealSubject和Proxy的共用接口,这样就能够在不论什么使用RealSubject的地方使用Proxy
class IGiveGift
{
public:
virtual void GiveDolls()=0;
virtual void GiveFlowers()=0;
virtual void GiveChocolate()=0;
}; //RealSubject类。定义了Proxy所代表的真实实体
class Pursuit:public IGiveGift
{
private:
SchoolGirl* mm;
public:
Pursuit(SchoolGirl* mm)
{
this->mm=mm;
}
void GiveDolls()
{
std::cout<<mm->getName()<<" 送你洋娃娃"<<std::endl;
}
void GiveFlowers()
{
std::cout<<mm->getName()<<" 送你鲜花"<<std::endl;
}
void GiveChocolate()
{
std::cout<<mm->getName()<<" 送你巧克力"<<std::endl;
}
}; //Proxy类。保存一个引用是的代理能够訪问实体。并提供一个与Subject的接口同样的接口,这样代理就能够用来替代实体
class Proxy:public IGiveGift
{
private:
Pursuit* gg;
public:
Proxy(SchoolGirl* mm)
{
gg=new Pursuit(mm);
}
void GiveDolls()
{
gg->GiveDolls();
}
void GiveFlowers()
{
gg->GiveFlowers();
}
void GiveChocolate()
{
gg->GiveChocolate();
}
};
(2)main.cpp
#include "Proxy.h"
#include <iostream>
#include <stdlib.h> //Client,client
void main()
{
SchoolGirl* jiaojiao=new SchoolGirl();
jiaojiao->setName("李娇娇"); Proxy* daili=new Proxy(jiaojiao); daili->GiveDolls();
daili->GiveFlowers();
daili->GiveChocolate(); delete jiaojiao;
jiaojiao=NULL;
delete daili;
daili=NULL;
system("pause");
}
(3)执行截图
版权声明:本文博客原创文章。博客,未经同意,不得转载。
大话设计模式C++实现-文章7章-代理模式的更多相关文章
- 大话设计模式C++达到-文章12章-外观模式
一.UML画画 关键词:添加Facade层. 二.概念 外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用. 三.说明 Q:外观模式在什 ...
- 大话设计模式C++达到-文章16章-国家模式
一.UML画画 二.概念 状态模式(State):当一个对象的内在状态改变时同意改变其行为.这个对象看起来像是改变了其类. 三.说明 以下是来自书本和网络的对状态模式的定义和分析: (1)状态模式同意 ...
- 大话设计模式C++实现-第22章-桥接模式
一.UML图 二.概念 桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都能够独立地变化. 三.说明 为什么叫"桥接模式"? 如上所看到的的UML图中,有一个聚合线, ...
- 大话设计模式C++实现-第19章-组合模式
一.UML图 关键词:Leaf是叶子,Composite是非叶子节点,Composite包括Leaf. 二.概念 组合模式(Composite):将对象组合成树形结构以表示"部分-总体&qu ...
- 设计模式之第16章-代理模式(Java实现)
设计模式之第16章-代理模式(Java实现) “现在朋友圈真是太让人蛋疼了啊.”“怎么说?”“一堆代理,各种卖东西的,看着好烦人.”“哎,删了呗.”“都是朋友,哪里好意思删啊.”“这倒也是...哎,迫 ...
- 第 2 章 代理模式【Proxy Pattern】
第 2 章 代理模式[Proxy Pattern] 以下内容出自:24种设计模式介绍与6大设计原则.pdf 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代 ...
- 第12章 代理模式(Proxy Pattern)
原文 第12章 代理模式(Proxy Pattern) 代理模式 概述: 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要 ...
- 大话设计模式C++实现-第1章-简单工厂模式
一.UML图 二.包括的角色 简单工厂模式包括三个角色: (1)工厂类Factory:工厂类是用来制造产品的. 因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类 ...
- 大话设计模式C++实现-第15章-抽象工厂模式
一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...
随机推荐
- JavaScript类数组对象参考
JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...
- POJ1201 差分约束
给定ai,bi, ci 表示区间[ai,bi]内至少有ci个点, 要求对于所有给定的ai,bi,ci, 至少多少个点才能满足题目的条件 重做这一题学到的一点是, 可以设变量来表示一些东西,然后才能找 ...
- android ksoap2调用.net Webservice 方法总结
android ksoap2调用.net Webservice 方法直接放到一个类里: package com.util; import org.ksoap2.SoapEnvelope; impor ...
- 《5》CentOS7.0+OpenStack+kvm云平台的部署—组态Horizon
感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载.请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- u-boot TFTP: 'Access violation' (2)
今天做tftp下载时间会遇到以下问题. --->8--- Load address: 0x20000000 Loading: * TFTP error: 'Access violation' ( ...
- HTML中心在页面上弹出自定义表单层(实现可能拖累)
使用DIV窗体来动态显示内容的原理:首先採用CSS和HTML隐藏弹窗中的内容,然后利用JavaScript(本教程中是JQuery)来动态显示它们.这样的效果不仅可以充分利用有限的版面空间,并且可以提 ...
- 解决.net的堆碎片化带来的内存占用过大的问题
场景 使用WCF开发的服务端在多个客户端登录后,其服务器的内存占用不断增加. 分析 使用Windbg分析得到内存碎片化严重,其中包含了非常大的空闲空间,最大的一块竟然有150M,真正使用的空间其实很小 ...
- json与jsonp区别浅析(json才是目的,jsonp只是手段) (转)
一言以蔽之,json返回的是一串数据:而jsonp返回的是脚本代码(包含一个函数调用): JSON其实就是JavaScript中的一个对象,跟var obj={}在质上完全一样,只是在量上可以无限扩展 ...
- swift笔记 (三) —— 字符和字符串
字符串和字符 苹果要是不提供了unicode的字符串和字符,那就是他们公司全部人的脑袋都被门夹过 他自己家都要发非常多国家的版本号的软件,怎么可能不用unicode呢 此处略去30字... 这里能够拿 ...
- Java Web整合开发(79) -- Struts 2
一. Struts 2.x 概述 不继承任何类的Action Struts 2的Action并不一定要实现Action接口或者继承ActionSupport,任何POJO都可以做Action,只要这个 ...