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. session会话复制

    前几天请教了Yoda大神关于会话复制方面的问题,        如果客户访问是两个服务器的东西,这样会有两个分别的session, 这两个session之间怎么交互,集群环境下,同构的服务器,专业术语 ...

  2. C++ 模板函数与模板类

    一.模板函数 函数模板提供了一类函数的抽象,即代表了一类函数.当函数模板被实例化后,它会生成具体的模板函数.例如下面便是一个函数模板:

  3. BZOJ 4423: [AMPPZ2013]Bytehattan

    Sol 对偶图+并查集. 思路非常好,将网格图转化成对偶图,在原图中删掉一条边,相当于在对偶图中连上一条边(其实就是网格的格点相互连边),每次加边用并查集维护就可以了. 哦对,还要注意边界就是网格外面 ...

  4. tcp 三次握手

  5. 用Kibana和logstash快速搭建实时日志查询、收集与分析系统

    Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志. kibana ...

  6. jQuery清除文本框,内容并设置不可用

    JQuery清除文本框,内容并设置不可用  如果是设置只读,则将disabled换成readonly function CleanText(textid) { $("#"+text ...

  7. 1.把二元查找树转变成排序的双向链表[BST2DoubleLinkedList]

    [题目]:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树 . 10 / \ 6 14 / \ / \ 4 8 12 16 转 ...

  8. iOS CoreData relationship 中的inverse

    官方文档建议为每一个可以设置inverse的relationship设置一个inverse.目的是保持数据库的正确性.但是没有具体的说明. 我在stackoverflow中找到了一个是分好的答案,ht ...

  9. linux grep 查找字符串

    2015年8月27日 12:04:58 在当前文件夹查找 public function abc() grep -re 'public function abc\b' . // 可以不加e, 适合函数 ...

  10. Linux下常用的硬件信息查看命令

    1.查看CPU型号,这里为了方便查看结合管道符用grep进行了匹配,当然只需要前面的命令也可以,命令如下: cat /proc/cpuinfo | grep "model name" ...