• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#设计模式:代理模式(ProxyPattern)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一,什么是C#设计模式?

代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问

二,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _12.代理模式
{
    /// <summary>
    /// 代理模式提供了一个中介控制对某个对象的访问。现实生活中,我们可能会用支票在市场交易中用来代替现金,支票就是账户中资金的代理。
    /// 为其他对象提供一种代理,来帮助达到目的。
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            ///中国人自己买菜
            Event c = new Chinese();
            c.DoSomeThing();

            ///代理中国人去买菜
            Event e = new Proxy();
            e.DoSomeThing();
            e.DoSomeThing();
        }
    }
    /// <summary>
    /// 抽象行为
    /// </summary>
    public abstract class Event
    {
        public abstract void DoSomeThing();
    }
    /// <summary>
    /// 中国人
    /// </summary>
    public class Chinese : Event
    {
        /// <summary>
        /// 本来中国人要去买菜
        /// </summary>
        public override void DoSomeThing()
        {
            Console.WriteLine("中国人,去买菜");
        }
    }
    /// <summary>
    /// 代理模式,第三方帮忙达到目的
    /// 实现AOP
    /// </summary>
    public class Proxy : Event
    {
        private Chinese chinese = null;
        private Chinese _chinese
        {
            get
            {
                if (this.chinese == null)
                    chinese = new Chinese();
                return chinese;
            }
        }
        /// <summary>
        /// 2 AOP:日志代理 异常代理 延迟代理 权限代理 单例代理 缓存代理 
        /// </summary>
        public bool flag = false;
        /// <summary>
        /// 代理帮忙中国人去买菜
        /// </summary>
        public override void DoSomeThing()
        {

            Console.WriteLine("DoSomeThing start...");
            ////AOP代理模式添加异常
            try
            {
                if (flag)
                {
                    _chinese.DoSomeThing();
                }
                if (!flag)
                {
                    ///DoSomeThing,可以在这里实现AOP(日志代理 异常代理 延迟代理 权限代理 单例代理 缓存代理)
                    ////初始化AOP写日志,AOP写缓存
                    Console.WriteLine("初始化AOP写日志");
                    Console.WriteLine("初始化AOP写缓存");
                }
                flag = true;
            }
            catch (Exception ex)
            { 
            
            }
            Console.WriteLine("DoSomeThing end...");
        }
    }
}

 

三,如上很简单的代码,本来中国人去买菜,但这时是由代理帮忙买菜了,

代理模式由三部分组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。(如上:Event接口)
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。(如上:Proxy)
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。(如上:Chinese)
四,代理模式和装饰者模式的区别:
1》代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能。
2》代理模式使用到极致开发就是AOP,在百科中AOP的解释:为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
3》AOP底层,就是采用动态代理模式实现的

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#获取类、方法、属性的自定义特性(Attribute)信息发布时间:2022-07-13
下一篇:
C#调用jar包压缩js发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap