13.代理模式(Proxy Pattern)
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)的更多相关文章
- 代理模式(Proxy pattern)
代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...
- 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 设计模式——代理模式(Proxy Pattern)
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...
- 七个结构模式之代理模式(Proxy Pattern)
定义: 给某一个对象提供一个代理或者占位符,并由代理类来控制对原对象的访问.代理对象在客户端和实际对象之间启到了中介作用,并且强调了代理类对原对象的控制作用.例如:安全代理.缓冲代理.远程代理等. 结 ...
- C#设计模式——代理模式(Proxy Pattern)
一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系 ...
- c#设计模式之代理模式(Proxy Pattern)
引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...
随机推荐
- [POJ2892]Tunnel Warfare
[POJ2892]Tunnel Warfare 试题描述 During the War of Resistance Against Japan, tunnel warfare was carried ...
- mysql 之基本操作
已经在板子内部把所有的环境都搭好了,现在的要求是对Mysql 进行一些基本的操作. 在这之前,记录几个要点以防以后忘记. 一,准备工作. 1. 将usr/share/mysql 目录下的 my-lag ...
- Struts2 Action 动态传参数
Struts2的两个Action之间传参的问题. 需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面. 1.使用r ...
- PingUtil in Android
Ping a host in Android:“ping -c 1 127.0.0.1”-c 1: The ping times. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...
- 2.1---删除链表中重复元素(CC150)
分成两种,1种开了额外空间,临时缓冲区,一种没有开 import java.util.HashSet; import java.util.Set; class ListNode{ int data; ...
- centos 终端 字体颜色
默认情况下,没有颜色. https://www.centos.org/docs/2/rhl-gsg-en-7.2/ls-color.html git也默认没有颜色,破解如下: git config - ...
- Maven打包排除不需要的文件。
pom.xml <!-- package打包排除掉一些配置文件 --> <plugin> <groupId>org.apache.maven.plugins< ...
- 【Other】最近正在看的
待看: https://my.oschina.net/yunfound/blog/141222 https://www.zhihu.com/question/22925358 http://study ...
- freemodbus-v1.5.0 源码分析
注:转载请注明出处 http://www.cnblogs.com/wujing-hubei/p/5935142.html FreeModbus协议栈作为从机,等待主机传送的数据,当从机接收到一帧完 ...
- Xcode 必备插件管理器 http://alcatraz.io
各种小插件,其中写注释用的 VVDocumenter 是必备的!