设计模式之二-Proxy模式
代理模式
组成:
对象实现同一个接口,先访问代理类再访问真正要访问的对象。
#ifndef BUILDING_H_ #define BUILDING_H_#include <stdio.h>class Building { public:Building();virtual ~Building();virtual void soldHouse()=0;virtual void rentHouse()=0; };#endif /* BUILDING_H_ *
#ifndef AGENCY_H_ #define AGENCY_H_#include "Building.h"class Agency : public Building { public:Agency(Building *pBuilding);~Agency();void soldHouse();void rentHouse();private:Building *m_Building; };#endif /* AGENCY_H_ */
#include "Agency.h"Agency::Agency(Building *pBuliding) {// TODO Auto-generated constructor stubm_Building = pBuliding; }Agency::~Agency() {// TODO Auto-generated destructor stub }void Agency::soldHouse() {m_Building->soldHouse(); }void Agency::rentHouse() {m_Building->rentHouse(); }
真实角色:CommunityResident.h CommunityResident.cpp SmallProperty.h SmallProperty.cpp
#ifndef COMMUNITYRESIDENT_H_ #define COMMUNITYRESIDENT_H_#include "Building.h"class CommunityResident : public Building { public:CommunityResident();~CommunityResident();void soldHouse();void rentHouse(); };#endif /* COMMUNITYRESIDENT_H_ */
#include "CommunityResident.h"CommunityResident::CommunityResident() {// TODO Auto-generated constructor stub }CommunityResident::~CommunityResident() {// TODO Auto-generated destructor stub }void CommunityResident::soldHouse() {printf("community resident sold house\n"); }void CommunityResident::rentHouse() {printf("community resident rent house\n"); }
#ifndef SMALLPROPERTY_H_ #define SMALLPROPERTY_H_#include "Building.h"class SmallProperty : public Building { public:SmallProperty();~SmallProperty();void soldHouse();void rentHouse(); };#endif /* SMALLPROPERTY_H_ */
#include "SmallProperty.h"SmallProperty::SmallProperty() {// TODO Auto-generated constructor stub }SmallProperty::~SmallProperty() {// TODO Auto-generated destructor stub }void SmallProperty::soldHouse() {printf("small property sold house\n"); }void SmallProperty::rentHouse() {printf("small property rent house\n"); }
接口调用:main.cpp
#include "Agency.h" #include "CommunityResident.h" #include "SmallProperty.h"void dealWithCommunity() {Agency *pAgency;pAgency = new Agency(new CommunityResident());pAgency->soldHouse();pAgency->rentHouse();delete pAgency; }void dealWithSmallProperty() {Agency *pAgency;pAgency = new Agency(new SmallProperty());pAgency->soldHouse();pAgency->rentHouse();delete pAgency; }int main(int argc,char **argv) {dealWithCommunity();dealWithSmallProperty();return 0; }
转载于:https://www.cnblogs.com/wanzaiyimeng/p/6829769.html
设计模式之二-Proxy模式相关推荐
- 虚无空间java下载_Java进阶篇设计模式之二 ----- 工厂模式
前言 在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模 ...
- 一天一种设计模式之二-----备忘录模式
2019独角兽企业重金招聘Python工程师标准>>> 一.备忘录模式 备忘录模式属于三种设计模式中的行为型模式(另外两种是创建型模式和结构型模式). 定义:在不破坏封闭性的前提下, ...
- 当Android遇上设计模式之代理(Proxy)模式
文章目录 1. 代理模式 1.1 代码实现 1.2 使用场景 2. 静态代理与动态代理 设计模式六大原则: 单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性: 开放封闭原则:类.模 ...
- 乱砍设计模式之二 -- STATE模式
转自 : http://blog.csdn.net/wishfly/archive/2008/01/22/2060026.aspx STATE模式的中文名称是状态模式.在<设计模式>一书中 ...
- Head First 设计模式 —— 13. 代理 (Proxy) 模式
思考题 如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435 已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标 ...
- C++设计模式之二 AbstractFactory模式
设计模式的目的就是尽量减少"变化"对程序的影响,尤其是对客户程序的影响.AbstractFactory模式作为创建型模式的一种,解决的就是"new"在变化中可能 ...
- 设计模式之二——工厂模式
1.工厂模式简介 1.1定义 简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类)来负责创建其他类的实例.可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都 ...
- PureMVC(AS3)剖析:设计模式(二)
PureMVC(AS3)剖析:设计模式(二) 模式 上一篇中介绍了PureMVC中使用的3种设计模式:单例模式.观察者模式.外观模式.本篇将继续介绍剩下的3种设计模式: l 使用中介者(Mediat ...
- 设计模式之(三) 构造模式
前言 离之前的设计模式之(二) 创建者模式的编写有一段时间了. 这部分的内容其实早已经写好. 最近整理出来. 另: 1. 虽都尽量详尽. 但是, 近来回看, 发现书中并不是都对. 也许是个人的理解不同 ...
最新文章
- 《花田半亩》有感——午夜静静地震撼着我的生命(不是技术,发在首页,只是因为感动)...
- vba遍历数组_VBA代码解决方案的第59讲内容:如何在代码运行时创建数组
- Flink 读取文本文件,聚合每一行的uid
- 什么是 TypeScript 里的 Constructor signature
- 2004-4-3+ asp.net编程环境的配置
- 镜头视场角计算工具_再谈远心镜头的设计及其独特的性能
- java百度地图坐标_java腾讯地图与百度地图坐标转换
- Python基础(使用print()函数输出格式化字符串)
- Spring Security视频地址
- mysql工具分页原理_高效的mysql分页方法及原理
- 解决“Pip - Fatal error in launcher: Unable to create process using... ”
- twisted系列教程二–缓慢的诗
- 电动牙刷C语言程序,电动牙刷的日常维护
- 【滤波器】5. 三种类型二阶低通滤波器
- SolidWorks2016安装
- matlab定义对角块矩阵,Matlab中的扩展块对角矩阵
- Spring 源码解析 七(aop )
- php读取加密sqlite,加密你的SQLite
- 金三银四,我为面试所准备的面试题,不看要遭老罪喽
- ISP简介(stm32)
热门文章
- vue-cli4 关闭 eslint 提示 解决‘xx‘ is defined but never used
- 【SpringMVC 笔记】结果跳转、数据处理、乱码问题
- 【恋上数据结构】回溯、剪枝(八皇后、n皇后)、LeetCode51.N皇后、LeetCode52.N皇后 II
- 【GitHub】提交新项目、更新已有的项目
- 【C++】C++11 新特性(auto,decltype,nullptr,快速遍历,【Lambda表达式详解】)
- 手把手教你最好用的数据分析方法,会用的没几个
- FineReport的公式编辑框的语法简介
- 帆软报表跨域之插件开发中Controller中定义的方法实现JSONP跨域
- 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校
- hnu 暑期实训之蛇形矩阵