代理模式

  组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点:
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
模式结构:
  

一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理
  对象实现同一个接口,先访问代理类再访问真正要访问的对象。
代理模式分为静态代理、动态代理。
静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。
代理模式可以很好的将前后端分开,实现了松散耦合。代理模式属于结构型模式
抽象角色:Building.h
#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_ *

代理角色:Agency.h Agency.cpp
#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模式相关推荐

  1. 虚无空间java下载_Java进阶篇设计模式之二 ----- 工厂模式

    前言 在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模 ...

  2. 一天一种设计模式之二-----备忘录模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.备忘录模式 备忘录模式属于三种设计模式中的行为型模式(另外两种是创建型模式和结构型模式). 定义:在不破坏封闭性的前提下, ...

  3. 当Android遇上设计模式之代理(Proxy)模式

    文章目录 1. 代理模式 1.1 代码实现 1.2 使用场景 2. 静态代理与动态代理 设计模式六大原则: 单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性: 开放封闭原则:类.模 ...

  4. 乱砍设计模式之二 -- STATE模式

    转自 : http://blog.csdn.net/wishfly/archive/2008/01/22/2060026.aspx STATE模式的中文名称是状态模式.在<设计模式>一书中 ...

  5. Head First 设计模式 —— 13. 代理 (Proxy) 模式

    思考题 如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435 已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标 ...

  6. C++设计模式之二 AbstractFactory模式

    设计模式的目的就是尽量减少"变化"对程序的影响,尤其是对客户程序的影响.AbstractFactory模式作为创建型模式的一种,解决的就是"new"在变化中可能 ...

  7. 设计模式之二——工厂模式

    1.工厂模式简介 1.1定义 简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类)来负责创建其他类的实例.可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都 ...

  8. PureMVC(AS3)剖析:设计模式(二)

    PureMVC(AS3)剖析:设计模式(二) 模式 上一篇中介绍了PureMVC中使用的3种设计模式:单例模式.观察者模式.外观模式.本篇将继续介绍剩下的3种设计模式: l  使用中介者(Mediat ...

  9. 设计模式之(三) 构造模式

    前言 离之前的设计模式之(二) 创建者模式的编写有一段时间了. 这部分的内容其实早已经写好. 最近整理出来. 另: 1. 虽都尽量详尽. 但是, 近来回看, 发现书中并不是都对. 也许是个人的理解不同 ...

最新文章

  1. 《花田半亩》有感——午夜静静地震撼着我的生命(不是技术,发在首页,只是因为感动)...
  2. vba遍历数组_VBA代码解决方案的第59讲内容:如何在代码运行时创建数组
  3. Flink 读取文本文件,聚合每一行的uid
  4. 什么是 TypeScript 里的 Constructor signature
  5. 2004-4-3+ asp.net编程环境的配置
  6. 镜头视场角计算工具_再谈远心镜头的设计及其独特的性能
  7. java百度地图坐标_java腾讯地图与百度地图坐标转换
  8. Python基础(使用print()函数输出格式化字符串)
  9. Spring Security视频地址
  10. mysql工具分页原理_高效的mysql分页方法及原理
  11. 解决“Pip - Fatal error in launcher: Unable to create process using... ”
  12. twisted系列教程二–缓慢的诗
  13. 电动牙刷C语言程序,电动牙刷的日常维护
  14. 【滤波器】5. 三种类型二阶低通滤波器
  15. SolidWorks2016安装
  16. matlab定义对角块矩阵,Matlab中的扩展块对角矩阵
  17. Spring 源码解析 七(aop )
  18. php读取加密sqlite,加密你的SQLite
  19. 金三银四,我为面试所准备的面试题,不看要遭老罪喽
  20. ISP简介(stm32)

热门文章

  1. vue-cli4 关闭 eslint 提示 解决‘xx‘ is defined but never used
  2. 【SpringMVC 笔记】结果跳转、数据处理、乱码问题
  3. 【恋上数据结构】回溯、剪枝(八皇后、n皇后)、LeetCode51.N皇后、LeetCode52.N皇后 II
  4. 【GitHub】提交新项目、更新已有的项目
  5. 【C++】C++11 新特性(auto,decltype,nullptr,快速遍历,【Lambda表达式详解】)
  6. 手把手教你最好用的数据分析方法,会用的没几个
  7. FineReport的公式编辑框的语法简介
  8. 帆软报表跨域之插件开发中Controller中定义的方法实现JSONP跨域
  9. 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校
  10. hnu 暑期实训之蛇形矩阵