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)
引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...
随机推荐
- [BZOJ1833][ZJOI2010]count 数字计数
[BZOJ1833][ZJOI2010]count 数字计数 试题描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入 输入文件中仅包含一行两个整数a ...
- Java工程为什么要加一个biz层
biz是Business的缩写,实际上就是控制层(业务逻辑层).解释:控制层的主要作用就是协调model层和view层直接的调用和转换.能够有效的避免请求直接进行数据库内容调用,而忽略了逻辑处理的部分 ...
- hiho #1325 : 平衡树·Treap
#1325 : 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? ...
- Opencv混合高斯模型前景分离
#include "stdio.h" #include "string.h" #include "iostream" #include &q ...
- 4.了解AngularJS模块和依赖注入
1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 ...
- NDK学习4: Eclipse HelloWorld
NDK学习4: Eclipse HelloWorld 1.配置Eclipse NDK环境 Window->preferences->android->ndk 2.新建Andro ...
- powerdesigner反向
1.Could not initial JVM不能初始化 :要求安装32位的JDK,把path指向32的安装目录 2.Non SQL Error : Could not load class orac ...
- struts的学习笔记
Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts 2 ...
- Struts2学习笔记《三》
Struts2的工作原理图: struts的用法:
- 多字段 java对象排序
public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexUtil.class); //getMet ...