C#设计模式--代理模式(学习Learning hard 设计模式笔记)
class Program
{
static void Main(string[] args)
{
//创建一个代理对象 并发出请求
Person proxy = new Friend(); proxy.BuyProduct(); Console.Read();
}
} //抽象主题角色
public abstract class Person
{
public abstract void BuyProduct(); } //真实主题角色
public class RealBuyPerson : Person
{
public override void BuyProduct()
{
Console.WriteLine("帮我买个苹果手机和苹果电脑");
}
} //代理主题角色
public class Friend : Person
{
//引用真实主题实例
RealBuyPerson RealSubject;
public override void BuyProduct()
{
Console.WriteLine("通过代理类访问真实实体对象的方法");
if (RealSubject == null)
{
RealSubject = new RealBuyPerson();
} //调用真实的主题方法
RealSubject.BuyProduct();
this.PreBuyProduct();
this.PostProduct(); } //代理角色执行一些操作
public void PreBuyProduct()
{
//买东西,列个清单,买的东西比较多
Console.WriteLine("我怕弄糊涂了,需要列一张清单,张三:手机,李四:要带电脑...........");
Console.WriteLine("买手机...........");
Console.WriteLine("买电脑...........");
Console.WriteLine("...........");
} //买完东西后 开始给朋友分发
public void PostProduct()
{
Console.WriteLine("买完了。。开始分东西,张三 手机,李四 电脑…………");
}
}
优点:
- 代理模式能够将调用用于真正被调用的对象隔离,在一定程度上降低了系统的耦合度;
- 代理对象在客户端和目标对象之间起到一个中介的作用,这样可以起到对目标对象的保护。代理对象可以在对目标对象发出请求之前进行一个额外的操作,例如权限检查等。
缺点:
- 由于在客户端和真实主题之间增加了一个代理对象,所以会造成请求的处理速度变慢
- 实现代理类也需要额外的工作,从而增加了系统的实现复杂度。
原文地址http://www.cnblogs.com/zhili/p/ProxyPattern.html
C#设计模式--代理模式(学习Learning hard 设计模式笔记)的更多相关文章
- 9. 星际争霸之php设计模式--代理模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- php设计模式之Proxy(代理模式)和Facade(外观)设计模式
Proxy(代理模式)和Facade(外观)设计模式它们均为更复杂的功能提供抽象化的概念,但这两种实现抽象化的过程大不相同 Proxy案例中,所有的方法和成员变量都来自于目标对象,必要时,该代理能够对 ...
- C++设计模式——代理模式
前言 青春总是那样,逝去了才开始回味:大学生活也是在不经意间就溜走了,现在上班的时候,偶尔还会怀念大学时,大家在一起玩游戏的时光.大学喜欢玩游戏,但是可悲的校园网,速度能把人逼疯了:还好,后来搞了一个 ...
- PHP设计模式-代理模式
概念理解: 代理模式,是对简单处理程序(或指针)的增强,用于引用一个对象:这个指针被代理对象取代,代理对象位于客户端和真实程序之间,指针有一个可被多个目标利用的钩子. 参与者: client(参与者) ...
- Java设计模式-代理模式之动态代理(附源代码分析)
Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...
- 浅谈Python设计模式 - 代理模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 一.在某些应用中,我们想要在访问某个对象之前执行一个或者多个重要的操作,例如,访 ...
- Java 之 设计模式——代理模式
设计模式——代理模式 一.概述 1.代理模式 (1)真实对象:被代理的对象 (2)代理对象:代理真实对象的 (3)代理模式:代理对象代理真实对象,达到增强真实对象功能的目的 二.实现方式 1.静态代理 ...
- Spring中常见的设计模式——代理模式
一.代理模式的应用场景 生活中的中介,黄牛,等一系列帮助甲方做事的行为,都是代理模式的体现.代理模式(Proxy Pattern)是指为题对象提供一种代理,以控制对这个对象的访问.代理对象在客户端和目 ...
- Java设计模式之--代理模式学习
1.代理模式定义 为其他对象提供一种代理以控制对这个对象的访问.代理对象起到中介服务,可以去掉功能服务和增加额外的服务. 其实按照官方的说法可能不太好理解,代理模式就好比我们生活中买票,一般情况下我们 ...
随机推荐
- 洛谷P3369 【模板】普通平衡树(Splay)
题面 传送门 题解 鉴于最近的码力实在是弱到了一个境界--回来重新打一下Splay的板子--竟然整整调了一个上午-- //minamoto #include<bits/stdc++.h> ...
- zoj3497 Mistwald(矩阵快速幂)
题意:给定一个有向图(最多25个节点,每个节点的出度最多为4),给定起点和终点,然后从起点开始走,走到终点就停止,否则一直往下走,问能不能P步到达终点.也就是说从起点出发,走一条长度为P的路径,路径中 ...
- 【Java学习笔记】如何写一个简单的Web Service
本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...
- 将url动态转换成二维码插件 - 兼容IE8
插件地址 http://static.runoob.com/assets/qrcode/qrcode.min.js ,网页直接打开,然后ctrl+s保存到本地. <!DOCTYPE html& ...
- 【洛谷十月月测】 P3927 SAC E#1 - 一道中档题 Factorial
题目传送门:https://www.luogu.org/problemnew/show/P3927 题目大意:给你两个正整数n,k,求n!在k进制下末尾零的数量. 我们通过简单的数学分析,便可以发现, ...
- Tomcat发生java.lang.OutOfMemoryError: PermGen space的解决方案
产生该问题的主要原因是JVM永久带空间不足导致的,可以在环境变量CATALINA_OPTS中提高MaxPermSize参数值 set CATALINA_OPTS = -XX:PermSize=12 ...
- 设置pip源头地址
更新pip源 1 . 可以直接在pip时加入参数 比如: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mysqldb 2 . 修改默 ...
- scalac:cannot connnect to compile server(idea 编译scala)
idea编译scala报错 解决办法: File->setting->scala compile server (找到jdk填上 ok)
- Android版本分布——2017年5月更新
Code Name Version API Level Last month This month Change gingerbread(姜饼) 2.3.3——2.3.7 10 0.9% 1.0% 0 ...
- Android 7.0 FileProvider 使用说明
FileProvider FileProvider 这个组件在Android 22.0.0 (也就是 Android 5.0 ) 版本下加入进Android系统,该组件是ContentProvider ...