大话设计模式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)详细工厂:包含详细 ...
随机推荐
- iOS Dev (59) 高度自适应的UITextView
iOS Dev (59) 高度自适应的UITextView 作者:阿锐 地址:http://blog.csdn.net/prevention - 例如以下 _inputTextView 为一个 UIT ...
- hdu 4107当卡段树
其核心思想是记录最大的节点值和最低值,假设max<p要么min>=p时间,在节点只变化add值,不要子树遍历:否则,就往子树递归. #include<iostream> #in ...
- 解决vmware卡的要死
如题: 一般而言虚拟机不会卡的.CPU跟随你的操作而增减,内存设置vmware的推荐值就好.遇到卡的情况,检查一下如下情况. 两个方法: 1>内存分配最好是1G,512少了点 2>虚拟机的 ...
- 基于Office 365 无代码工作流分析-需求基本分析!
客户需求分析: 嘉昊信息是一家IT创业型公司,因为公司初创,有较多的招聘员工的需求,公司近期购买了Office 365,因为招聘工作繁琐,HR人员须要做非常多反复繁琐工作,HR主管提议开发一个招 ...
- Atitit.软件的仪表板(8)--os子系统--监控资源使用情况
Atitit.软件的仪表板(8)--os系统--资源占用监測 CPU使用 内存使用 磁盘队列 任务管理器 网络速度 插件列表( 资源管理器插件,浏览器插件,360optim) 启动项管理 (350) ...
- [windows phone] 教你如何使地图动画缩放
原文:[windows phone] 教你如何使地图动画缩放 说明 本篇将介绍如何将地图以动画显示呈现,在以下的范例介绍中可以看到有动画跟没动画的差别,如果你的地图还是很单调的话,不仿加上这个设计,让 ...
- lua学习笔记11:lua中的小技巧
lua中的小技巧,即基础lua语言本身的特种,进行一个些简化的操作 一. 巧用or x = x or v 等价于: if not x then x = v end 假设x为nil或false,就给他赋 ...
- rsync+inotify 实现资源服务器的同步目录下的文件变化时,备份服务器的同步目录更新,以资源服务器为准,去同步其他客户端
测试环境: 资源服务器(主服务器):192.168.200.95 备份服务器(客户端):192.168.200.89 同步目录:/etc/test 同步时使用的用户名hadoop密码12345 实验目 ...
- Cocos2d-x学习笔记(19)(TestCpp源代码分析-3)
本章主要介绍testBasic.h/cpp,这两个文件主要用于返回主场景界面. //testBasic.h #ifndef _TEST_BASIC_H_ #define _TEST_BASIC_H_ ...
- 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }
异常{ 无法将 匿名方法 转换为类型"System.Delegate",因为它不是委托类型 } 委托实际上是把方法名作为参数,但是若有好多个方法时,就要指明是哪个参数 查看如下代 ...