zoukankan      html  css  js  c++  java
  • 代理模式

    1.概述

      为其他对象提供一种代理以控制对这个对象的访问。

    2.优缺点

    优点

      1)职责清晰

      真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

      2)代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。

      3)高扩展性

    缺点
      1)由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
      2)实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

    3.特点

      1)“增加一层间接层”是软件系统中对许多负责问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。

      2)具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象作细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象作proxy。

      3)proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。代理类型从某种角度上讲也可以起到控制被代理类型的访问的作用。

    4.使用场景

      代理模式在很多情况下都非常有用,大到一个系统框架、企业平台,小到代码片段、事务处理等。特别是你想强行控制一个对象的时候,比如:延迟加载,监视状态变更的方法等等。

    5.代码

      《大话设计模式C++版》

     1 #include "stdafx.h"
     2 #include <string>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 //抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
     7 class Interface
     8 {
     9 public:
    10   virtual void Request()=0;
    11 };
    12 
    13 //真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
    14 class RealClass : public Interface
    15 {
    16 public:
    17   virtual void Request()
    18   {
    19     cout<<"真实的请求"<<endl;
    20   }
    21 };
    22 
    23 //代理角色:实现抽象角色,是真实角色的代理。
    24 //通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
    25 class ProxyClass : public Interface
    26 {
    27 private:
    28   RealClass* m_realClass;
    29 public:
    30   virtual void Request()
    31   {
    32     m_realClass= new RealClass();
    33     m_realClass->Request();
    34     delete m_realClass;
    35   }
    36 };
    37 
    38 int _tmain(int argc, _TCHAR* argv[])
    39 {    
    40   ProxyClass* test=new ProxyClass();
    41   test->Request();
    42 
    43   system("Pause");
    44   return 0;
    45 }    

     6.推荐网址

      http://blog.csdn.net/hguisu/article/details/7542143

      http://www.cnblogs.com/cbf4life/archive/2010/01/27/1657438.html

  • 相关阅读:
    设置nginx禁止IP直接访问,只能通过指定的域名访问
    (转)给力开源,.Net开源地址大收集
    Jmeter的使用
    Jmeter的安装
    虚拟机的使用(1)
    win下 Eclipse+PyDev环境搭建
    eclipse配置pydev解释器
    win下Python2.7+pip+Ipython安装
    CentOS 6.5 安装VMTools 及 设置拼音输入法
    CentOS 6.5 + JDK + mysql + tomcat + jpress搭建及所遇问题解决
  • 原文地址:https://www.cnblogs.com/SnailProgramer/p/4274214.html
Copyright © 2011-2022 走看看