using System;

namespace Test
{
//抽象角色:声明真实对象和代理对象的共同接口。
//代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,
//同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。
//同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
//实角色:代理角色所代表的真实对象,是我们最终要引用的对象。
//使用场景:当我们需要使用的对象很复杂或者需要很长时间去构造,
//这时就可以使用代理模式(Proxy)。例如:如果构建一个对象很耗费时间和计算机资源,
//代理模式(Proxy)允许我们控制这种情况,直到我们需要使用实际的对象。一个代理(Proxy)通常包含和将要使用的对象同样的方法,
//一旦开始使用这个对象,这些方法将通过代理(Proxy)传递给实际的对象。 一些可以使用代理模式(Proxy)的情况:
class Program
{
static void Main(string[] args)
{
ProxyPerson proxy = new ProxyPerson(new Person() { Name = "游客", Power = });
proxy.Post();
proxy.Remove();
proxy.Check();
proxy.Comment(); Console.ReadLine();
}
} // 抽象论坛用户
public interface IPerson
{
string Name { get; set; }
int Power { get; set; }
//发帖
void Post();
//删贴
void Remove();
//审查贴
void Check();
//回复贴
void Comment();
} public class Person : IPerson
{
public string Name { get; set; }
public int Power { get; set; } public void Post()
{
Console.WriteLine("发帖");
} public void Remove()
{
Console.WriteLine("删贴");
} public void Check()
{
Console.WriteLine("审查贴");
} public void Comment()
{
Console.WriteLine("回复贴");
}
} // 代理
public class ProxyPerson : IPerson
{
public string Name { get; set; }
public int Power { get; set; }
Person RPerson;
public ProxyPerson(IPerson person)
{
this.Name = person.Name;
this.Power = person.Power;
RPerson = (Person)person;
} public void Post()
{
if (Power < )
RPerson.Post();
else
Console.WriteLine("游客不能发帖");
} public void Remove()
{
if (Power == )
RPerson.Remove();
else
Console.WriteLine("管理员才能删帖");
} public void Check()
{
if (Power == )
RPerson.Check();
else
Console.WriteLine("管理员才能审查贴");
} public void Comment()
{
if (Power < )
RPerson.Post();
else
Console.WriteLine("游客不能回复");
}
}
}

13.代理模式(Proxy Pattern)的更多相关文章

  1. 代理模式(Proxy pattern)

    代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...

  2. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  3. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...

  4. 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释

    代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...

  5. 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 设计模式——代理模式(Proxy Pattern)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...

  7. 七个结构模式之代理模式(Proxy Pattern)

    定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...

  8. C#设计模式——代理模式(Proxy Pattern)

    一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...

  9. c#设计模式之代理模式(Proxy Pattern)

    引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...

随机推荐

  1. JavaScript深入浅出3-语句

    慕课网教程视频地址:Javascript深入浅出 程序由语句组成,语句遵守特定语法规则 块 block  {}   没有块级作用域 声明    var 异常   try catch finally 函 ...

  2. [黑科技]bit reverse

    写FFT的时候yy出来了这个bit reverse...时间复杂度O(n),常数大概是(a[x>>1]>>1)|((x&1)<<26)的二分之一(-O3下) ...

  3. 求最大公约数和小于n的所有质数

    //algorithm.h enum SWAP_TYPE{MEMORY, COMPLEX}; struct SIntArray { int *pData; int num; SIntArray():p ...

  4. faad解码aac

    // faad2.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <cassert> #include <io ...

  5. c++写入txt文件

    简单方式: #include "stdafx.h" #include <iostream> #include <iomanip> #include < ...

  6. Remove Duplicate Letters I & II

    Remove Duplicate Letters I Given a string which contains only lowercase letters, remove duplicate le ...

  7. 【转】Git如何Check Out出指定文件或者文件夹

    [转]Git如何Check Out出指定文件或者文件夹http://www.handaoliang.com/a/20140506/195406.html 在进行项目开发的时候,有时候会有这样的需求那就 ...

  8. 【转】你可能不知道的Shell

    本文转自http://coolshell.cn/articles/8619.html,只摘取了其中的一部分. 再分享一些可能你不知道的shell用法和脚本,简单&强大! 在阅读以下部分前,强烈 ...

  9. php bom \ufeff

    2015年5月29日 16:50:56 星期五 五月的最后一个周五............. 前两天遇到一个问题 PHP 返回json数据, 其他人死活解析不出来 json_last_error(); ...

  10. frxReport 设计 (mtm)

    ► 设计  frxReport  frxReport 窗体上放一个  [frxReport] 的控件 双击 [frxReport]控件 进入设置模式 frxReport1.ShowReport() 方 ...